以下是什么表现?
#! /usr/bin/perl -w
eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
if 0; #$running_under_some_shell
if 0
永远不会成立,因此eval部分永远不会执行,$0
的价值是什么(单引号内?)Ps:取自find2perl命令的结果
答案 0 :(得分:4)
最佳猜测 - 正如在此评论中#$running_under_some_shell
,它是检测脚本是否由perl之外的某个shell运行,例如bash中。
if 0永远不为真,因此eval部分永远不会执行,
不是perl,不是。通过其他shell如bash,它不会发现行继续,只会执行eval
语句。然后在perl下重新运行脚本。 (奇怪的是有不同于hashbang线的选项。)
并且eval也很奇怪 - 在这个上下文中$ 0的值是什么(在单引号内?)
同样,这将通过bash而不是perl进行扩展:这里它表示将find2perl传递给perl解释器的路径。
答案 1 :(得分:4)
我在这里找到了一些讨论: http://www.perlmonks.org/?node_id=825147
延伸的hashbang就在那里你 几乎可以运行你的Perl脚本 任何/ bin / sh在阳光下,甚至是 shell /内核不尊重 hashbang,它仍将启动perl 最后。