但是我对模块的目录结构有一个小查询.
根据perlmonk article,模块代码目录结构应如下所示:
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
但是当我使用该命令时,结构生成如下
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
解决方法
打破差异:
>模块已从顶层移动到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和两者中的更改相同:MANIFEST(由“make manifest”构建)用于确定在打包模块以进行上载时应该重新分发构建库中的哪些文件,并用于验证包是否已完成它被下载并解压缩用于构建.更改只是一个更改日志,您可以手动编辑以记录每个分布式版本中所做的更改.
正如您对问题的评论中所建议的那样,使用Module :: Starter或Dist :: Zilla(警告Dist :: Zilla是基于Moose并将安装大量的先决条件)是一种更现代化的模块构建方法办法.在这两者中,h2xs版本更接近现代包装标准,但你最好使用推荐的软件包启动器选项之一(可能是Module :: Build,它使用Build Perl脚本而不是Makefile来构建码).