如何开始新的Perl模块分发?

Tim*_*Tim 8 perl structure project makemaker

我正在尝试建立一个用Perl编写的大型项目.在IBM MakeMaker的教程非常有帮助,到目前为止,但我不明白如何将所有模块链接到主程序.在我的项目的根,我有MANIFEST,Makefile.PL,README,一个bin目录和lib目录.在我的bin目录中,我有我的主脚本(Main.pl).在lib目录中,我有我的每一个模块,分成它们各自的目录(即Utils::Util1Utils::Utils2utils目录等).在每个模块目录中,还有一个t包含测试的目录

我的MANIFEST文件包含以下内容:

bin/Main.pl
lib/Utils/Util1.pm
lib/Utils/Util2.pm
lib/Utils/t/Utils1.t
lib/Utils/t/Utils2.t
Makefile.PL
MANIFEST
README
Run Code Online (Sandbox Code Playgroud)

Makefile.PL 如下:

use ExtUtils::MakeMaker;
WriteMakefile(
    'NAME'=>'Foo',
    'VERSION_FROM'=>'bin/Main.pl',
    'PREREQ_PM'=>{
    "XML::Simple"=> 2.18}, #The libraries that we need and their
                   #minimum version numbers
    'EXE_FILES' =>[("bin/Main.pl")]
);
Run Code Online (Sandbox Code Playgroud)

在我制作和运行之后,程序崩溃,抱怨它找不到Utils::Util1,当我跑'时make test,它说no tests defined.有人可以提出任何建议吗?我从未在perl中完成过这样的大型项目,我需要添加更多模块

bri*_*foy 13

如果您刚刚开始创建Perl模块(这也是Perl相当于一个项目),请不要使用Makemaker.Module :: Build是要走的路,它现在是标准库的一部分.Makemaker适用于尚未转换为Module :: Build的旧盐.:)我现在会发现Module :: Build没有维护并且不受欢迎; 我仍然使用MakeMaker.

您永远不应该通过尝试自己创建结构来启动Perl项目.这是太多的工作,你总会忘记一些事情.

h2xs一个程序附带,perl并且应该是将.h文件转换为Perl的胶水语言XS的工具.它工作正常,但它的优点是它附带perl:

% h2xs -AXn Module::Name
Run Code Online (Sandbox Code Playgroud)

Module :: Starter这样的东西有点复杂,尽管你必须从CPAN获得它.它是我们在Intermediate Perl中使用的工具,因为它很简单.它用您的信息填写一些模板:

% module-starter --author=... --email=... --module=...
Run Code Online (Sandbox Code Playgroud)

如果您要这么做,那么您可以将其转换为Distribution :: Cooker,以便您可以自定义文件和内容.这是我为自己写的一个很小的实用程序,所以我可以使用自己的模板.

% dist_cooker Module::Name
Run Code Online (Sandbox Code Playgroud)

如果你真的是核心,你可能想要Dist :: Zilla,但对那些已经知道他们在做什么的人来说更是如此.


Gau*_*rav 9

可能我也建议module-starter?它会自动创建一个"Just Works"的骨架项目.我通过阅读生成的骨架文件了解了我对Perl模块组织的了解.这些都是文档齐全的,并且很容易用作开发更大项目的基础.您可以查看入门文档以了解它为您提供的内容.

运行module-starter将为您提供Perl分发,包含许多模块(使用命令行选项--module,例如:

module-starter --distro=Project --module=Project::Module::A,Project::Module::B [...]
Run Code Online (Sandbox Code Playgroud)

在单个分发中创建多个模块).无论您是希望将项目组织为由多个模块一起工作的单个分发,还是作为多个可以单独发布但彼此依赖的发行版(在您的Build或中配置),由您决定.Makefile.PL文件)提供完整的系统.


cjm*_*cjm 5

试试这个结构:

bin/Main.pl
lib/Utils/Util1.pm
lib/Utils/Util2.pm
Makefile.PL
MANIFEST
README
t/Utils1.t
t/Utils2.t
Run Code Online (Sandbox Code Playgroud)

正如ysth所说,make不安装你的模块,它只是在一个blib目录中构建它们.(在你的情况下,它只是复制它们,但如果你有XS代码,它将使用C编译器进行编译.)make install用于安装模块以供常规脚本使用.

如果要在make和之间运行脚本make install,可以执行以下操作:

perl -Mblib bin/Main.pl
Run Code Online (Sandbox Code Playgroud)

-Mblib指示Perl来适当的目录临时添加到搜索路径,所以你可以尝试卸载的模块.(make test这是自动的.)