我有多个 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
管理的)。