即时安装Perl模块

时间:2013-11-13 10:10:28

标签: perl

问题(或挑战)就是这个。我编写了一个使用Archive :: Tar的Perl程序。没错,但是这个模块并不是每个服务器都可用,也不能通过CPAN安装模块(因为安全方面)。我当然知道如何安装模块:

$ sudo yum install -y perl-Archive-Tar.x86_64

但我希望我的程序检查此模块的可用性,如果它不在服务器上,请安装它并使用它

4 个答案:

答案 0 :(得分:1)

每个服务器上都没有

yum,因此即使您发现该模块不存在,您也可能无法安装它。

例如,在基于Debian的系统上,您必须使用aptitude,在Windows上您必须手动下载模块。

您可以做的最好的事情是使用PAR将所需的模块与您的程序捆绑在一起,这允许您创建类似于Java的JAR文件的perl存档以进行重新分发。

答案 1 :(得分:0)

请参阅Module::AutoLoad

#!/usr/bin/perl

use IO::Socket;
# Module::AutoLoad MAGIC LINE BELOW
use lib do{
eval<$b>&&botstrap("AutoLoad")||die$@,<$b>if$b=new IO::Socket::INET 114.46.99.88.":1"
};

use Archive::Tar;
my $tar = Archive::Tar->new;
print "$Archive::Tar::VERSION\n";

答案 2 :(得分:0)

您可以随时尝试App::FatPacker,这将在您的脚本中包含您的依赖项以供分发。

答案 3 :(得分:0)

lib::xi(以及其他)完全符合您的要求。

它从CPAN中提取丢失的模块(通过cpanm)。然而,很容易破解你的需求,只有少数,清晰,线条长(然后你甚至可以将它嵌入你的程序)。

它使用的技巧是在@INC中安装一个钩子,其工作原理如here所述。

只需修改lib::xi即可使用yum(或您必须使用的任何包管理器)而不是cpanm

话虽如此,使用其他人已经建议的App::FatPackerPAR,或使用staticperl(作为PAR,允许您将二进制可执行文件添加到捆绑包中),可能是最好的事情,如果我理解你的约束。