find2perl perl shebang + eval的确切含义是什么?

时间:2011-05-25 11:47:22

标签: perl eval

以下是什么表现?

#! /usr/bin/perl -w
    eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
        if 0; #$running_under_some_shell
  • if 0永远不会成立,因此eval部分永远不会执行,
  • 并且eval也很奇怪 - 在这种情况下$0的价值是什么(单引号内?)

Ps:取自find2perl命令的结果

2 个答案:

答案 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   最后。