2013-03-26 39 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引發異常。