2013-03-26 83 views
0

我想在我的mac pro上安装gccg(gccg.sourceforge.net),并安装了山狮。 我试图按照手册每一个东西来安装,但它给了我一些错误,如:在perl中双斜线之间的执行命令是什么?

gccg_package.pl:gccg_package在gccg_package.pl线需要gunzip解1224

然后我“M试图铲除这一问题,并递归发现的这根:

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

我输出的这个& &运营商的操作数的各个部分,并确保“/gunzip /“在这里返回false。这里的问题是,我不是这些陈述在这里意味着什么?

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

+0

我希望这条语句执行简单的模式匹配。所以'/ gunzip /'相当于'($ _ =〜/ gunzip /)' – 2013-03-26 07:59:24

回答

2

我在Perl有点生疏但:

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

&&被用作操作时,如果左手侧返回true短切右边将被执行。

右侧/gunzip /是一个正则表达式,在Perl如果没有变量(标量) 宣布它将会在默认变量进行的正则表达式$_ 因此,这将只是搜索的第一部分的oputput为“gunzip”,如果它包含它,则返回true

最后一部分or die "$0: gccg_package requires gunzip";只有在前两个部分中的一个返回false时才会执行。

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

+0

对于提及没有声明变量(标量)的正则表达式,+1将在默认变量$ _上执行 – David 2013-03-26 13:49:41

1

基本上,这条线告诉你应该安装gunzip

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

+0

这真的很详细,非常感谢。 – David 2013-03-26 13:51:48

4

总之,它使程序结束如果gunzip --version 2>&1输出不包含字符串gunzip

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