更多优先级 - Shebang line 或 perl 命令



我有多个 Perl 脚本,其中 shebang 行已经过时了。也就是说,shebang 指向了旧版本的 Perl。

旧每路径:

#!/data/oracle10.0/perl/bin/perl

新版本的 Perl 在

#!/data/**oracle11.0**/perl/bin/perl

我已经将perl命令软链接到新版本perl的位置。

perl -> /data/oracle11.0/perl/bin/perl

现在,shebang 指向旧版本,perl 命令指向较新版本。

所以,当我做perl sample.pl时,shebang被忽略了。

我写了一些示例脚本来了解这一点。当我使用 perl 命令时,似乎忽略了 shebang 行。但我记得旧版本的perl并非如此(Shebang被认为是perl命令)。

所以我的问题是,新版本的perl(5.10)和旧版本(5.8)相对于shebang线有不同的行为吗?如果将 perl 命令传递给它,新版本的 Perl 会忽略 shebang 行吗?

当你运行perl myscript.pl时,它会启动perl二进制文件,并myscript.pl作为输入,然后运行。 在这种情况下,无论Perl版本如何,您都将始终$PATH中获取第一个perl二进制文件。 正如mpapec在他的评论中所说,您可以使用命令确定这是哪个perl which perl

当你运行./myscript.pl你的 shell 会寻找一个 shebang 行,如果存在,它会执行 shebang 中列出的程序,并为其提供文件内容作为输入。 (如果没有,shell 本身会尝试处理文件的内容。 在这种情况下,无论 Perl 版本如何,您都将始终在 shebang 的路径上获得perl

这是基本的 *nix 行为,在 Perl 版本之间没有改变(因为它首先不是由 perl 管理的)。

最新更新