更优先-Shebang行还是perl命令?

更优先-Shebang行还是perl命令?,perl,scripting,shebang,Perl,Scripting,Shebang,我有多个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脚本,其中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
二进制文件,并将其作为输入,然后运行。在这种情况下,无论perl版本如何,都将始终从
$PATH
中获取第一个
perl
二进制文件。正如mpapec在他的评论中所说,您可以通过使用命令
which perl
来确定这是哪个
perl

当您运行
/myscript.pl
时,shell会查找shebang行,如果有,它会执行shebang中列出的程序,并将文件内容作为输入。(如果没有,shell本身将尝试处理文件的内容。)在这种情况下,您将始终在shebang的路径处获得
perl
,这与perl版本无关


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

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

当您运行
/myscript.pl
时,shell会查找shebang行,如果有,它会执行shebang中列出的程序,并将文件内容作为输入。(如果没有,shell本身将尝试处理文件的内容。)在这种情况下,您将始终在shebang的路径处获得
perl
,这与perl版本无关


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

从cmd行运行
哪个Perl
,检查您实际使用的是什么<代码>chmod 755 script.pl/script.pl强制perl从shebang中删除。perl始终扫描shebang行以查找其他命令行参数,但它不会执行另一个perl。shebang行的预期使用者是您的shell。从cmd行运行
哪个perl
,检查您实际使用的是什么<代码>chmod 755 script.pl/script.pl强制perl从shebang中删除。perl始终扫描shebang行以查找其他命令行参数,但它不会执行另一个perl。shebang行的预期使用者是您的shell。我相信使用
/myscript.pl
时,内核会查看前16位(在shell分叉的进程中),如果它是
#
它尝试运行(
execl
?),如果失败,shell将获得一次机会。我相信,使用
/myscript.pl
时,内核将查看前16位(在shell分叉的进程中),如果它是
#它尝试运行(
execl
?),如果失败,shell将获得一个快照。