执行命令在perl的双斜杠之间放什么?

时间:2013-03-26 07:43:57

标签: perl syntax

我正在尝试在安装了山狮的mac pro上构建gccg(gccg.sourceforge.net)。 我试图按照手册安装所有东西,但它给了我一些错误,如:

  

gccg_package.pl:gccg_package需要在gccg_package.pl第1224行使用gunzip。

然后我试图根除这个问题,并递归地找到它的根:

($_ = `gunzip --version 2>&1`)  &&  /gunzip / or die "$0: gccg_package requires gunzip";

我输出操作数的每一部分与此&&运算符,并确保“/ gunzip /”在此处返回false。这里的问题是我不知道这些陈述在这里是什么意思?

对不起我和perl的新手,我试图找到一些教程,但似乎不是那么容易搜索。

3 个答案:

答案 0 :(得分:4)

简而言之,如果gunzip --version 2>&1的输出不包含字符串gunzip,则会导致程序结束。

  • $_ = `gunzip --version 2>&1`在反引号中执行shell命令,捕获其输出,将输出存储在$_中,如果返回输出则返回true。
  • /gunzip /是匹配运算符。如果$_的内容包含字符串gunzip,则返回true。
  • die抛出异常。

答案 1 :(得分:2)

我在perl中有点生疏,但是:

第一部分($_ = `gunzip --version 2>&1`)执行gunzip --version 2>&1并将输出存储在$_

&&用作快捷操作,如果左侧返回true,则右侧将被执行。

右侧/gunzip /是正则表达式,如果没有变量,则在perl中(标量) 为正则表达式声明它将在默认变量$_上执行 所以这只会搜索“gunzip”的第一部分的oputput,如果它包含它则返回true

如果前两个部分中的一个返回false,则只会执行最后一部分or die "$0: gccg_package requires gunzip";

有关短路操作的更多信息,请查看http://www.perlmonks.org/?node_id=301355

答案 2 :(得分:1)

基本上,此行告诉您应安装gunzip

gunzip是一个Unix命令;这一行的作用是它首先将$_部分的结果分配给变量gunzip --version;然后它在该变量上运行正则表达式搜索/gunzip /,以检查命令的结果是否包含gunzip(而不是gunzip,没有空格,如果没有空格,也可以找到命令的结果是gunzip: command not found)。最后,如果搜索不成功,例如gunzip由于某种原因未执行,程序在打印您阅读的邮件后停止(die)。