我有多个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行吗?
答案 0 :(得分:4)
当您运行perl myscript.pl
时,这会启动perl
二进制文件并将其作为输入myscript.pl
,然后运行它。在这种情况下,无论Perl版本如何,始终都会从perl
获取第一个$PATH
二进制文件。正如mpapec在评论中所说,您可以使用perl
命令确定which perl
这是什么。
当您运行./myscript.pl
时,您的shell会查找一个shebang行,如果存在,它将执行shebang中列出的程序并将其作为输入提供给文件内容。 (如果没有,shell本身会尝试处理文件的内容。)在这种情况下,无论Perl版本如何,总是在shebang的路径上获取perl
。< / p>
这是基本的* nix行为,并且在Perl版本之间没有变化(因为它首先不由perl
管理)。