用CPAN安装强制模块

时间:2012-02-08 21:05:29

标签: perl

我知道在命令提示符下使用CPAN安装“强制”模块很容易。我试图通过脚本实现相同的目标:

use CPAN;
eval "use Filesys::DiskSpace" or do {
    CPAN::install("Filesys::DiskSpace");
};

有没有办法在代码中添加'force'选项? 编译模块时出现以下错误:

  make test had returned bad status, won't install without force

警告可能不严重,所以我想继续进行安装。 感谢。

3 个答案:

答案 0 :(得分:5)

您似乎需要将CPAN实例化为变量并在其上调用force()方法

my $cpan = CPAN->new;
$cpan->force();
$cpan->install("Filesys::DiskSpace");

答案 1 :(得分:3)

只要你真的知道你在做什么:

eval "use Filesys::DiskSpace; 1" or do {
    CPAN::Shell->force("install","Filesys::DiskSpace");
};

use内置函数即使成功也没有返回任何有用的内容,因此必须在字符串eval中包含“;1”。

答案 2 :(得分:3)

看起来您只确保安装了Filesys::DiskSpace

unless( eval { require Filesys::DiskSpace } ){
  require CPAN;
  CPAN::Shell->force("install","Filesys::DiskSpace");
}

如果您想确保加载了Filesys::DiskSpace,请将其安装(如果不可用):

BEGIN{
  unless( eval { require Filesys::DiskSpace } ){
    require CPAN;
    CPAN::Shell->force("install","Filesys::DiskSpace");
  }
}
use Filesys::DiskSpace;

注意:

如果您的Perl程序出现问题,可能是因为您刚刚安装了损坏的模块。

该特定模块自1999年以来尚未正式发布 它也有相当多的bug reports