2011-05-25 58 views
4

以下幾點可以做到:find2perl perl shebang + eval的確切含義是什麼?

#! /usr/bin/perl -w 
    eval 'exec /usr/bin/perl -S $0 ${1+"[email protected]"}' 
     if 0; #$running_under_some_shell 
  • if 0是不正確的,所以EVAL部分將永遠不會被執行,
  • 和EVAL奇怪太 - (單引號內)是什麼$0在這方面的價值

PS:從find2perl命令的結果採取

+1

http://stackoverflow.com/questions/2308874/explain-the-deviousness-of-the-perl-preamble – daxim 2011-05-25 12:37:08

回答

4

的最佳答案 - 在此評論#$running_under_some_shell,它的檢測如果腳本由perl之外的某個shell運行,例如慶典。

的,如果0是不正確的,所以EVAL部分將永遠不會被執行,

不被Perl,沒有。通過諸如bash之類的其他shell,它不會識別行繼續,只會執行eval聲明。然後這將重新運行perl下的腳本。 (奇怪的是具有比hashbang行不同的選項。)

和EVAL奇怪太 - (單引號內)什麼是$ 0在這方面的價值

同樣,這將是由bash擴展而不是perl:這裏意味着find2perl傳遞給perl解釋器的路徑。

4

我發現了一些討論在這裏: http://www.perlmonks.org/?node_id=825147

擴展hashbang是存在的,所以你 幾乎可以 任何/斌/在陽光下SH,甚至 shell /內核運行你的Perl腳本不會兌現 hashbang,它仍然會在最後啓動perl 。

相關問題