为CPAN(和CorporatePAN)打包perl脚本的推荐方法是什么?

时间:2010-12-21 08:26:38

标签: windows linux perl packaging cpan

最近,我查看了CPAN上的一个模块,该模块附带了要安装的脚本 这让我很好奇。在脚本中包含脚本的推荐方法是什么? 应该最终公开CPAN,如果有任何不同的建议 将在内部CPAN服务器上发布的软件包?

脚本的开头如下:

#!/usr/bin/perl

eval 'exec /usr/bin/perl  -S $0 ${1+"$@"}'
  if 0; # not running under some shell

两个问题

我是否正确理解eval部分是不必要的? 这将在安装过程中由CPAN客户端嵌入 在Windows上安装时会有很大不同。

推荐的sh-bang系列是什么? 那会是

吗?
#!/usr/bin/env perl

而不是以上?

2 个答案:

答案 0 :(得分:6)

只需使用

#!/usr/bin/perl

(或者,可选地,无论开发机器上perl的路径是什么。)

当Module :: Build或MakeMaker安装您的脚本时,它会更改#!行以匹配正在安装模块的perl。它还将添加“eval exec”行,除了在Windows下,它将创建一个.bat文件。 (CPAN客户端与此无关。)

如果您使用

#!/usr/bin/env perl

然后安装程序将不会意识到这是一个Perl脚本,并且不会修改#!行。

答案 1 :(得分:3)

在安装发行版时,正在为某些特定的perl 安装,并且应该明确设置#!使用该perl(如$Config{startperl}中所示)。据我所知,所有模块安装程序都会为您完成此操作。 (更新:如cjm所述,仅当#!as distributed运行perl,而不是env。)

传统上包含eval内容,即使使用sh scriptname调用脚本,也会自动使用perl。这是无害的。