cpan模块的目录结构

mad*_*dia 5 perl cpan

我正在研究我想在CPAN中提交的perl模块.但是我对模块的目录结构有一个小查询.

根据perlmonk文章,模块代码目录结构应如下所示:

    Foo-Bar-0.01/Bar.pm
    Foo-Bar-0.01/Makefile.PL
    Foo-Bar-0.01/MANIFEST
    Foo-Bar-0.01/Changes
    Foo-Bar-0.01/test.pl
    Foo-Bar-0.01/README
Run Code Online (Sandbox Code Playgroud)

但是当我使用该命令时,结构生成如下

    h2xs -AX Foo::Bar

    Writing Foo-Bar/lib/Foo/Bar.pm
    Writing Foo-Bar/Makefile.PL
    Writing Foo-Bar/README0
    Writing Foo-Bar/t/Foo-Bar.t
    Writing Foo-Bar/Changes
    Writing Foo-Bar/MANIFEST
Run Code Online (Sandbox Code Playgroud)

Joe*_*hon 3

这篇文章提倡使用相当古老的模块结构。它当然可以使用,但它失去了许多在良好的测试、构建和分发实践方面已经取得的进步。

分解差异:

  • 模块已从顶层移至 lib/ 目录。这统一了模块“所在”的位置(即,您处理代码并创建要测试和最终分发的基线模块的位置)。它还可以更轻松地设置您需要的任何层次结构(例如子类或辅助模块);新的设置只会选择这些。老一辈可能会,但我对它还不够熟悉,无法说是或否。
  • 当运行“make”时,较新设置中的 Makefile.PL 将会。创建一个名为“blib”的库,即 *b*uild *lib*rary - 这是为实际测试构建代码的地方。它几乎是 lib/ 的副本,除非您有 XS 代码,在这种情况下,这就是编译的 XS 代码的最终位置。这使得构建和测试代码的过程更加简单;如果您更新 lib/ 中的文件,Makefile 会在尝试测试之前将该文件重建到 blib 中。
  • t/ 目录替换 test.pl;“make test”将执行 t/ 中的所有 *.t 文件,而不是必须将所有测试放在 test.pl 中。这使得编写测试变得更加容易,因为您可以确保在每个测试开始时都有一致的状态。
  • MANIFEST 和 Changes 在两者中是相同的:MANIFEST(由“make manifest”构建)用于确定模块打包上传时应重新分发构建库中的哪些文件,并用于在模块打包上传时验证包是否完整。下载并解压以进行构建。Changes 只是一个变更日志,您可以手动编辑它来记录每个分布式版本中所做的更改。

正如对您的问题的评论中所建议的那样,使用 Module::Starter 或 Dist::Zilla (请注意,Dist::Zilla 是基于 Moose 的,并且会安装大量先决条件)是在更现代的环境中构建模块的更好方法。方式。在这两个版本中,h2xs 版本更接近现代打包标准,但您最好使用推荐的包启动选项之一(可能还有 Module::Build,它使用 Build Perl 脚本而不是 Makefile 来构建代码)。