在许多perl脚本中(特别是在着名的CPAN发行版中),我找到了以下代码:
eval 'exec /usr/bin/perl -w -S $0 ${1+"$@"}'
if 0; # not running under some shell
我想知道它是为了什么?
感谢。
答案 0 :(得分:8)
某些系统在脚本开头没有识别#!/usr/bin/perl
行,因此尝试在这样的系统上按名称调用Perl程序只会将脚本传递给shell。为了解决这个问题,可移植的Perl程序以一行开头,当由标准POSIX shell解释时,该行会将脚本传递给perl(1)
。 if 0
导致在Perl本身运行时忽略该行,并将其放在单独的行上会导致shell将其视为单独的命令,只要它在读取时就运行eval 'exec /usr/bin/perl -w -S $0 ${1+"$@"}'
。 / p>
答案 1 :(得分:2)
该行在shell和perl下有效。由于跟随eval
,因此会跳过perl if 0
。在shell中,使用eval在perl
中执行相同的文件。