使用哪个更好或更快作为Perl脚本的shebang行?
#! perl
#! perl.exe
#! fullpath/perl(/perl.exe)
#! partialpath/perl(/perl.exe)
Run Code Online (Sandbox Code Playgroud)
并且,在使用时#!perl
,当它在特定系统上运行时,如何在脚本中找到我正在使用的perl解释器,以便将其放入shebang行?
并且,如果使用/path/path/perl
,是*
或...
允许用于文件夹?
Sch*_*ern 64
如果你需要硬编码#!,请使用#!/usr/bin/env perl
.为什么?你想要的是Perl程序与用户首选的Perl一起运行.这将是他们的第一次PATH
. #!perl
没有做我的意思,它不搜索用户的路径,#!/usr/bin/env perl
是你如何拉它. /usr/bin/env
将永远存在于Unix系统上.
如果用户正在使用Windows,正如其他人所指出的那样,那并不重要.Windows不使用#!它使用文件扩展名关联.确保您的程序被调用foo.pl
或其他东西,它会工作.但包括#!无论如何,一些实用程序和编辑使用它.
如果您要运送代码,请让安装人员负责处理.双方MakeMaker/Makefile.PL
并Module::Build/Build.PL
会改变你的#!用于匹配用户用于安装的perl的行.他们会为你解决这个问题.
如果要为自己的生产用途安装代码,则应使用perl特定副本的完整路径.perl的哪个副本?一个特定于您的项目.这是否意味着您需要为每个项目编译perl?不,你可以制作一个符号链接.FOO项目可能会/usr/local/bin/fooperl
在点/usr/bin/perl5.18
.使用#!/usr/local/bin/fooperl
.现在,如果您决定升级perl,则可以通过更改符号链接为每个项目执行此操作.
正如ChristopheD指出的那样,我可以从实践中确认(XP上的ActivePerl),在Windows上并不是真的需要shebang线.
一个shebang行告诉Unix shell哪个解释器将脚本传递给.
在Windows上,传递脚本的程序将由基于扩展名的关联确定.
在Unix上,第三个选项(perl
可执行文件的完整路径)是最好的.
是的,你可以在理论上使用".."(shell并不关心),但你不应该真正使用相对路径 - 你永远不知道执行脚本时当前的工作目录是什么.
小智 5
如果您使用 Perl 在 Unix 中进行开发,并且使用“perlbrew”在不同版本的 Perl 之间轻松切换,那么“#!/usr/bin/env perl”shebang 行效果很好。
我最初将 shebang 行中的前 2 个字符颠倒了。刚刚修复/编辑了它。