问题描述
|
以下是什么?
#! /usr/bin/perl -w
eval \'exec /usr/bin/perl -S $0 ${1+\"$@\"}\'
if 0; #$running_under_some_shell
if 0
永远不会成立,因此评估部分将永远不会执行,
而且评估也很奇怪-在这种情况下,$0
的值是什么(在单引号内?)
ps:取自find2perl命令的结果
解决方法
最佳猜测-如注释ѭ3所示,它用于检测脚本是否由perl以外的其他shell运行,例如重击。
如果0永远都不为真,那么eval部分将永远不会执行,
不是perl,不是。对于其他shell(例如bash),它不会发现行继续,而只会执行
eval
语句。然后,这将在perl下重新运行脚本。 (奇怪的是,与hashbang行不同的选项。)
而且eval也很奇怪-在这种情况下,$ 0的值是什么(在单引号内?)
同样,这将通过bash而不是perl进行扩展:在这里,这意味着将find2perl传递到perl解释器中的路径。
,我在这里找到了一些讨论:
http://www.perlmonks.org/?node_id=825147
扩展的哈希爆炸在那里,所以您
几乎可以运行您的Perl脚本
阳光下的任何/ bin / sh,甚至
不遵守的外壳/内核
hashbang,它将仍然启动perl
到底。