在Perl脚本中“不在某些shell下运行”是什么意思?

时间:2012-02-04 19:18:26

标签: perl cpan

在许多perl脚本中(特别是在着名的CPAN发行版中),我找到了以下代码:

eval 'exec /usr/bin/perl -w -S $0 ${1+"$@"}'
if 0; # not running under some shell

我想知道它是为了什么?

感谢。

2 个答案:

答案 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中执行相同的文件。

相关问题