我正在尝试在安装了山狮的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的新手,我试图找到一些教程,但似乎不是那么容易搜索。
答案 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
)。