我想分发具有一个CPAN依赖关系的Perl应用程序。当有人启动应用程序时,我可以包含对此依赖项的检查。通过命令行参数或者直接在perl里面?
答案 0 :(得分:5)
除了本question中讨论的多种方式之外,您还可以考虑将必备模块与您的代码捆绑在一起。您可以选择PAR
,PAR::Packer
和其他选项。
答案 1 :(得分:3)
这是一个没有其他依赖关系的纯Perl模块吗?
我只是用我的代码打包它。哎呀,如果你愿意,你甚至可以将它附加到你的文件中。
如果这有点复杂,也就是说,必须安装十几个必需的模块,并且需要一些编译,你必须使用CPAN来下载它。有一个CPAN::AutoINC,当需要模块而不是@INC
路径时,可以从CPAN下载并安装所需的任何模块。
然而,我的经验是,你最终得到一堆乱七八糟的虫子。用户可能会开始运行您的程序,认为它只运行一分钟才发现他们在没有时间的情况下花费20分钟下载,编译和测试必备模块。
最好只是失败,并对所需要的内容给出一个很好的解释。用户可能更喜欢以root身份运行cpan
,因此它可供计算机上的所有人使用。或者,也许他们需要让系统管理员为他们做这件事。
我发现我可以这样做:
our $missingModuleFlag;
BEGIN {
eval { require My::Mod; };
our $missingModuleFlag = $@ if ($@);
}
[...]
our $missingModuleFlag; #Package Variable -- Value is from above
if ($missingModuleFlag) {
die <<EOM;
ERROR: You are missing module "My::Mod" which is required for
this program. Please use "cpan" to download this module
and install it on this server. If you have no idea what
I am talking about, see http://www.cpan.org/modules/INSTALL.html.
If that doesn't make any sense to you, then ask a system administrator.
EOM
}
它解释了问题是什么,需要做什么,并让用户可以选择继续安装,或者让别人为他们做这件事。