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

sza*_*gab 3 linux windows perl packaging cpan

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

该脚本如下所示:

#!/usr/bin/perl

eval 'exec /usr/bin/perl  -S $0 ${1+"$@"}'
  if 0; # not running under some shell
Run Code Online (Sandbox Code Playgroud)

两个问题

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

什么是推荐的sh-bang线?那会吗?

#!/usr/bin/env perl
Run Code Online (Sandbox Code Playgroud)

而不是上述?

cjm*_*cjm 6

只是用

#!/usr/bin/perl
Run Code Online (Sandbox Code Playgroud)

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

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

如果你使用

#!/usr/bin/env perl
Run Code Online (Sandbox Code Playgroud)

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