perl - Perl 脚本的 shebang 行应该使用什么?

标签 perl shebang

将其中哪一个用作 Perl 脚本的 shebang 行更好或更快?

#! perl

#! perl.exe

#! fullpath/perl(/perl.exe)

#! partialpath/perl(/perl.exe)

而且,当使用#!perl时,当它在特定系统上运行时,我如何在脚本中找到我正在使用的perl解释器,以便我可以将其放入shebang中线?

<小时/>

并且,如果使用 /path/path/perl,是否允许将 *... 用于文件夹?

最佳答案

如果您必须硬编码#!,请使用#!/usr/bin/env perl 。为什么?您想要的是 Perl 程序以用户首选的 Perl 运行。这将是他们的 PATH 中的第一个。 。 #!perl没有执行我的意思,它不会搜索用户的路径,#!/usr/bin/env perl这就是你如何实现这一目标。 /usr/bin/env在 Unix 系统上永远存在。

如果用户使用的是 Windows,正如其他人指出的那样,这并不重要。 Windows 不使用#!它使用文件扩展名关联。确保您的程序名为 foo.pl或其他东西,它会起作用。但要包括#!无论如何,因为一些实用程序和编辑器会使用它。

如果您要传送代码,请让安装程序来处理。两者MakeMaker/Makefile.PLModule::Build/Build.PL会改变你的#!行来匹配用户用来安装的 perl。他们会为您解决这个问题。

如果您要安装代码供自己的生产使用,则应使用特定 perl 副本的完整路径。 Perl 的哪个副本?一个特定于您的项目的。这是否意味着您需要为每个项目编译 perl?不,您可以创建符号链接(symbolic link)。项目 foo 可能有 /usr/local/bin/fooperl指向/usr/bin/perl5.18 。使用#!/usr/local/bin/fooperl 。现在,如果您决定升级 perl,您可以通过更改符号链接(symbolic link)来针对每个项目进行升级。

关于perl - Perl 脚本的 shebang 行应该使用什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2791954/

相关文章:

perl - 如何在 Perl 中实现延迟模块加载?

perl - 我应该如何处理无法修复的错误的失败测试

xml - XML 文件的第一个字符必须是什么?

python - conda 托管环境中的 Shebang

Python shebang 和换行符

perl - 如何在 perl 中获取 'milliseconds' 作为时间的一部分?

perl - PSGI 响应 : What kinds of filehandles can be expected to work with PSGI, 和 Plack?

regex - 跨多行的复杂匹配

Java 11 : Executing Source File via Shebang is not working