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

2024-05-19 12:02:50 发布

您现在位置:Python中文网/ 问答频道 /正文

以下哪一个更好或更快地用作Perl脚本的shebang行?

#! perl

#! perl.exe

#! fullpath/perl(/perl.exe)

#! partialpath/perl(/perl.exe)

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


如果使用/path/path/perl,那么*...是否允许用于文件夹?


Tags: path脚本文件夹系统exe解释器perlshebang
3条回答
  1. 正如ChristopheD所指出的,我可以从实践中(在XP上是ActivePerl)确认shebang行在Windows上不是真正必要的。

    shebang行告诉Unix shell将脚本传递给哪个解释器。

    在Windows上,要将脚本传递给的程序将由基于扩展名的关联确定。

  2. 在Unix上,第三个选项(指向perl可执行文件的完整路径)是最好的。

    是的,理论上可以使用“.”(shell不在乎),但不应该真正使用相对路径-执行脚本时永远不知道当前的工作目录是什么。

如果你不得不硬编码的话!,使用#!/usr/bin/env perl。为什么?您希望Perl程序使用用户首选的Perl运行。这将是他们的第一个节目。#!perl不符合我的意思,它不搜索用户的路径,#!/usr/bin/env perl就是这样实现的。/usr/bin/env在Unix系统上始终存在。

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

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

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

一个Windows she-bang(从perl.exe位推断)似乎无关紧要,因为您的(ahem)“shell”可能甚至不解析它(如果我错了,请纠正我,可能是最近更改的)。

尽管如此(according to this thread),一些命令行标志仍然可以由Perl自己获取。

相关问题 更多 >

    热门问题