如何在Perl应用程序中包含CPAN依赖项?

时间:2011-07-26 20:54:44

标签: perl cpan

我想分发具有一个CPAN依赖关系的Perl应用程序。当有人启动应用程序时,我可以包含对此依赖项的检查。通过命令行参数或者直接在perl里面?

2 个答案:

答案 0 :(得分:5)

除了本question中讨论的多种方式之外,您还可以考虑将必备模块与您的代码捆绑在一起。您可以选择PARPAR::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
}

它解释了问题是什么,需要做什么,并让用户可以选择继续安装,或者让别人为他们做这件事。