【问题标题】:Perl/CPAN how to distribute script rather than modulePerl/CPAN 如何分发脚本而不是模块
【发布时间】:2017-07-17 04:46:03
【问题描述】:

我刚刚发布了我的第一个 perl 程序 unifdef+ (code::unifdefplus, v0.5.3),但我不确定我是否做得正确。该程序分为两部分——一个脚本(script/unifdef+.pl)和一个模块(lib/unifdefplus.pm)。该脚本基本上是模块的包装器。这应该充当命令行实用程序(这实际上是我想要发布的)。

我包含的 README 文件记录了脚本,而不是模块。 CPAN 似乎也从模块而不是脚本中获取版本(目前尚未定义)。

所以,我的问题是:如果我希望将其作为脚本而不是模块进行索引,我是否需要做一些不同的事情?另外,我认为我也应该为模块编写一些文档——在这种情况下,我假设它应该是 lib 目录中的 README 文件?

再次道歉,但这是我第一次这样做,我想确保我做得对。

【问题讨论】:

  • 检查其他脚本是如何做到的,例如在App::命名空间中。
  • 很好的例子是 App::cpanminus、App::cpanminus::reporter 或 CPAN::Uploader。不要在命名空间的第一部分发布任何以小写字母开头的内容。这些是为编译指示保留的。
  • Re "CPAN 似乎是从模块而不是脚本中获取版本",使用 MM 和 MB,您可以指定哪个文件获取版本从
  • Re "a module (lib/unifdefplus.pm)", 不要放在具有根名称空间的 CPAN 模块上
  • @ikegami 有一个非常重要的观点,我已经用这些信息更新了我的答案。所有新的 CPAN 作者应始终阅读On the naming of modules

标签: perl cpan


【解决方案1】:

请立即阅读 PAUSE 管理员的On the naming of modules。如果您仍有疑问或不确定,请联系modules <at> perl.org

最简单的方法是使用App:: 命名空间中的名称,例如App::MyMod

通常,我会将脚本和模块文档保存在各自的文件中,但靠近模块文档的顶部,清楚地链接到脚本的文档,并声明大多数用户都希望阅读它以供正常使用。

从脚本文档构建README

pod2readme bin/my_script

同样,如果您改变主意并希望 README 改为引用该模块:

pod2readme lib/App/MyMod.pm

假设您使用ExtUtils::MakeMaker 进行构建,您可以通过添加指令来确保已安装脚本:

EXE_FILES => [
    'bin/my_script'
],

当然,您的脚本位于您的发行版的顶级 bin 目录中。其他构建系统也有类似的指令。

【讨论】:

  • 好的,为了清楚起见,您建议我将模块从 code::UnifdefPlus 移动到 App::Unifdefplus。我正在使用 perl Module::Build 实用程序来生成文件。我会看看它是否与 MakeMaker 的 EXE_FILES 选项等效。
  • 是的,我就是这么说的。
  • 好的,谢谢。我已将其移至 App。 Module::Build 中似乎没有等效的 EXE_FILES,所以我希望将其移至 App 就足够了。感谢您的帮助。
猜你喜欢
  • 2019-11-28
  • 1970-01-01
  • 2021-09-14
  • 2013-11-09
  • 1970-01-01
  • 2017-01-02
  • 1970-01-01
  • 2010-11-02
  • 1970-01-01
相关资源
最近更新 更多