【发布时间】:2020-08-24 16:08:45
【问题描述】:
我必须调试一个旧的 perl 脚本,显然它正在以我不理解的方式设置 perl 的版本...
: # use perl
eval 'exec perl -S $0 ${1+"$@"}'
if 0;
perl -h 表示-S 的意思是“使用 PATH 环境变量查找程序文件”。 $0 是当前程序。我读过$@ 的意思是“来自最后一个eval 命令的Perl 语法错误消息”。但是他们为什么要加 1 呢?这一切如何结合在一起?它在做什么?
我必须调试的部分原因在于它选择了我不想要的旧版本的 perl。对于其他一切,我们使用#!/usr/bin/env perl,我怀疑它可能正在做同样的事情。我还怀疑我的解决方案可能在于修复$PATH(或防止弄乱它的代码弄乱它)。但我想进一步了解它现在是如何选择版本的。
感谢您的帮助!
【问题讨论】:
-
Re "我读过 $@ 的意思",在 Perl 中是的,但是 Perl 从不执行该命令(因为
if 0)。它由 shell 执行的命令(如果 shebang 行以某种方式被忽略)。