0

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

4

3 回答 3

4

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

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

我对 perl 有点生疏,但是:

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

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

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

or die "$0: gccg_package requires gunzip";仅当前两个部分之一返回 false 时,才会执行最后一部分。

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

于 2013-03-26T08:00:04.113 回答
1

基本上,这一行告诉你应该安装gunzip.

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

于 2013-03-26T07:59:21.427 回答