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

Бер*_*ров 5 perl cpan

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

eval 'exec /usr/bin/perl -w -S $0 ${1+"$@"}'
if 0; # not running under some shell
Run Code Online (Sandbox Code Playgroud)

我想知道它是为了什么?

谢谢.

jwo*_*der 8

有些系统无法识别#!/usr/bin/perl脚本开头的行,因此尝试在这样的系统上按名称调用Perl程序只会将脚本传递给shell.为了解决这个问题,可移植的Perl程序以一行开头,当由标准POSIX shell解释时,会导致脚本被传递给它perl(1).的if 0原因线时Perl本身运行被忽略,并且将其放置在单独的行导致炮弹把它当作一个单独的命令,就在运行eval 'exec /usr/bin/perl -w -S $0 ${1+"$@"}',只要它是阅读.

  • 我有脚本执行此操作,以便它们将在Solaris和Linux下运行.shebang指向Solaris perl,但在Linux下,脚本作为shell执行,eval行执行Linux perl.perls安装在奇数位置,但文件/目录通过NFS在系统之间共享. (2认同)