【问题标题】:Tips on developing a suite of Perl modules开发一套 Perl 模块的技巧
【发布时间】:2012-05-04 19:51:07
【问题描述】:

我需要为内部工作开发一组 Perl 模块。我希望它们都组成一个家族或模块套件,而不是分开。

例如,套件将类似于:

MySuite::App::Module1
            ::Module2
MySuite::Env
MySuite::Utils::Logger
              ::Util2

我经历过perlmodstyle、perlnewmod 等,但它们似乎都专注于开发单个模块的技巧。在开发/分发这样的套件时,有哪些提示/最佳实践? (套件中的各个模块可以由不同的开发人员编写)

【问题讨论】:

  • 我使用 Perl 已经有一段时间了,我的建议是:切换到 Python :)
  • 你所说的在 Perl 中被称为 Module Distribution;这也可能有助于搜索。

标签: perl perl-module


【解决方案1】:

它与单模块发行版没有太大区别。另外两个既定的约定是:

  1. 将模块分层放置在lib 目录中。

    MySuite::App::Module1       →   lib/MySuite/App/Module1.pm
    MySuite::App::Module2       →   lib/MySuite/App/Module2.pm
    MySuite::Env                →   lib/MySuite/Env.pm
    MySuite::Utils::Logger      →   lib/MySuite/Utils/Logger.pm
    MySuite::Utils::Util2       →   lib/MySuite/Utils/Utils2.pm
    
  2. 选择一个主模块作为分发名称。您的示例看起来应该有一个额外的 lib/MySuite.pm 和包声明 MySuite 并且没有太多代码和一些入口点文档。在 Build.PL 文件中将此模块分配为 module_name。


有关一般包装的更多信息,请参阅:

有关您的进度的反馈/批评可通过以下方式获得:

【讨论】:

  • 感谢您的回答。感谢您是否可以进一步澄清以下内容。 (a) 当我使用 Module::Starter 时,它会生成 Makefile.PL 而不是 Build.PL。它们是一样的吗? (b) Module::Starter 将每个模块放在一个单独的根目录下,如果它们是在不同时间创建的。应该怎么做才能将它们移动到原始套件的根目录? (c) 知道在 (b) 中组合模块时应该如何编写测试吗?感谢您的宝贵时间。
  • ⒜ Makefile.PL 和 Build.PL 不一样(不同的 API),但用途相同。 ⒝ 将子目录lib、t、script 移动到套件基目录中。将构建文件/README/distro 元文件合并到套件基目录中的等效文件中。 ⒞ 由于测试默认运行所有t/*.t 文件,所以除了移动我刚才写的测试文件之外不需要任何工作。
【解决方案2】:

使用 perl 附带的 h2xs 命令行工具。它将创建一个非常有用的 perl 模块框架(特别适合在 CPAN 上分发)。输入你的外壳:

$ h2xs -X 我的套件

这将创建一个单独的发行版,该特定模块骨架放置在 lib 中。 研究它并根据需要在 lib 下创建其他 .pm 文件。研究源码中的“package”行,匹配文件路径;你应该得到基本的想法。例如:

  $ cd MySuite
  $ touch -p lib/MySuite/App/Module.pm
  $ touch -p lib/MySuite/Env.pm
  $ ...

将是向您的发行版添加更多模块的基本步骤。每当您要添加另一个 .pm 文件或更改文件名时,发出一个

  $ perl Makefile.PL  (only first time or "Makefile" not present)
  $ make manifest

同步您的清单文件;它将添加模块分发中的所有文件。这允许您使用

  $ make dist

为您创建一个 MySuite-0.1.tar.gz 存档。最后,您可以使用以下方法测试您的套件:

  $ make test

h2xs 对模块作者来说非常方便,并且承担了准备基本模块分发基础架构的负担。它创建占位符来填写特定文档并创建一个 Makefile 来管理您的分发 - 随着它变得越来越大,您会很感激它。将您的模块发送到 CPAN,您会很高兴它的索引效果。

【讨论】:

    猜你喜欢
    • 2014-10-10
    • 2010-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-15
    • 1970-01-01
    相关资源
    最近更新 更多