Perl模块分发是否可以包含脚本

时间:2016-08-25 11:45:26

标签: perl module

我正在考虑使用模块来分组脚本。我经常最终会遇到一个或多个使用某个模块的脚本。

是否可以将脚本与模块一起打包?

有没有具体说明如何实现?

感谢您的意见。

1 个答案:

答案 0 :(得分:3)

通过在EXE_FILES文件中包含Makefile.PL指令,并在数组引用中提供脚本的相对路径,可以将脚本与模块一起包含在内。在下面的示例中,脚本位于模块目录顶层的bin/目录中。您不需要将文件放在类似分布的布局中,但它有帮助(见下文)。

设置目录结构并摆弄Makefile.PL中的路径后,运行make install会将您的脚本与模块一起安装。

use ExtUtils::MakeMaker;

WriteMakefile(
    NAME              => 'My::Module',
    VERSION_FROM      => 'lib/My/Module.pm',
    ($] >= 5.005 ?
      (ABSTRACT_FROM  => 'lib/My/Module.pm',
    AUTHOR            => 'My Name <email.addr>') : ()),
    LIBS              => [],
    EXE_FILES         => [qw(bin/script1 bin/script2)],
    DEFINE            => '',
    INC               => '-I.',
    PREREQ_PM         => {},
);

就个人而言,我建议将您的模块变成一个完整的发行版。这是一个例子。首先,安装Module::Starter,然后:

module-starter --author="My Name" --email="my@email.com" --module=My::Module --eumm

现在您可以将模块的代码复制到lib/My/Module.pm,创建bin/目录,将脚本放入其中,将EXE_FILES指令添加到Makefile.PL,然后您可以使用全套make命令来制作,测试和安装模块和脚本,例如:

perl Makefile.PL
make
make test
make install

这是一个真实的example,我自己在CPAN上的一个发行版,包括一个捆绑的pinmap Perl脚本以及发行版的模块: