检查机器中安装的模块列表

mad*_*dia 5 perl module

我已经制作了一个脚本来管理管理员需要在机器上安装的模块列表.

我试图通过下面的代码检查安装的模块.奇怪的是它在机器中显示甚至安装的模块not installed

    #!/usr/bin/perl -w
    my @module_list =('Smart::Comments','HTML::Parse');
    foreach (@module_list) {
      eval { require "$_" };
      if (!($@)) {
        print "Module Not installed : $_\n";
      }
    }
Run Code Online (Sandbox Code Playgroud)

zgp*_*max 5

您需要使用字符串形式,eval因为require需要一个裸字参数来匹配模块名称的双冒号分隔形式(例如Scalar::Util).(如果它不是一个单词,那么它需要是一个相对路径,例如'Scalar/Util.pm')

#!/usr/bin/perl

use strict;
use warnings;

my @module_list = ('Scalar::Util', 'flibble');

foreach (@module_list) {
    if (!eval "require $_") {
        print "Module not installed: $_\n";
    }
}
Run Code Online (Sandbox Code Playgroud)

  • `require`确实接受一个不是单词的表达式,但它必须求值为文件名.(例如`Smart/Comments.pm`而不是`Smart :: Comments`) (2认同)