问题(或挑战)就是这个。我编写了一个使用Archive :: Tar的Perl程序。没错,但是这个模块并不是每个服务器都可用,也不能通过CPAN安装模块(因为安全方面)。我当然知道如何安装模块:
$ sudo yum install -y perl-Archive-Tar.x86_64
但我希望我的程序检查此模块的可用性,如果它不在服务器上,请安装它并使用它
答案 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::FatPacker
或PAR
,或使用staticperl(作为PAR,允许您将二进制可执行文件添加到捆绑包中),可能是最好的事情,如果我理解你的约束。