我正在考虑使用模块来分组脚本。我经常最终会遇到一个或多个使用某个模块的脚本。
是否可以将脚本与模块一起打包?
有没有具体说明如何实现?
感谢您的意见。
答案 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脚本以及发行版的模块: