2011-07-26 43 views
0

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

+0

http://stackoverflow.com/questions/1094125/try-to-use-module-in-perl-and-print-message-if-module-not-available – 2011-07-26 21:21:31

回答

3

这是一个纯粹的Perl模块,没有其他的依赖关系吗?

我只是用我的代码打包它。哎呀,你甚至可以将它附加到你的文件,如果你愿意。

如果这有点复杂,也就是说,有十几个必需的模块必须安装,并且需要一些编译,您将不得不使用CPAN来下载它。有一个CPAN::AutoINC这是假设下载和安装任何模块,你需要CPAN当需要模块,而不是在@INC路径。

但是,我的经验是,你最终会陷入一团糟。用户可能会开始运行程序,认为它只运行一分钟,但发现他们花费20分钟时间才能下载,编译和测试必备模块。

最好只是失败,并给出一个很好的解释。用户可能更喜欢以根用户身份运行cpan,因此它可供机器上的所有人使用。或者,也许他们需要让系统管理员为他们做。

我发现我可以做这样的事情:

our $missingModuleFlag; 

BEGIN { 
    eval { require My::Mod; }; 
    our $missingModuleFlag = [email protected] if ([email protected]); 
} 

[...] 

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 
} 

它说明了什么问题,需要做什么,并为用户提供了一个选择,要么与安装继续,或要求别人为他们做。

5

除了此question中讨论的多种方法之外,还可以考虑将必备模块与代码捆绑在一起。有几种选择可供您使用PAR,PAR::Packer和其他。

相关问题