【问题标题】:What is the recommended way to package perl scripts for CPAN (and CorporatePAN)?为 CPAN(和 CorporatePAN)打包 perl 脚本的推荐方法是什么?
【发布时间】:2011-05-28 16:47:40
【问题描述】:

最近我查看了 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

而不是上面的?

【问题讨论】:

    标签: windows linux perl packaging cpan


    【解决方案1】:

    随便用

    #!/usr/bin/perl
    

    (或者,可选地,无论perl 的路径在您的开发计算机上。)

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

    如果你使用

    #!/usr/bin/env perl
    

    那么安装程序不会意识到这是一个 Perl 脚本,也不会修改 #! 行。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 实际上,eval 是因为直到版本 8 Unix 之前的 #! wasn't invented。早期版本只是假设可执行文本文件必须是 shell 脚本。
      猜你喜欢
      • 2010-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-02
      • 2013-11-20
      • 1970-01-01
      • 2014-09-05
      • 2010-10-19
      相关资源
      最近更新 更多