Проверьте список модулей, установленных в машине - PullRequest
5 голосов
/ 09 февраля 2012

Я сделал скрипт для интима администратора, список модулей должен быть установлен на машине.

Я пытаюсь проверить, установлен ли модуль под кодом ниже. Странно то, что он показывает даже установленный модуль в машине как not installed

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

Ответы [ 2 ]

5 голосов
/ 09 февраля 2012

Вам необходимо использовать строковую форму 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";
    }
}
1 голос
/ 10 февраля 2012

Это мой App :: Module :: Lister , который я разработал как модуль, который может работать как модуль, утилита командной строки или скрипт CGI.Это простая вещь, в которой я нуждался для друга, у которого был только FTP-доступ к веб-серверу.

Он дает вам список всего в пути поиска модулей Perl, который я обычно нахожу легче, чем проверять определенные модули каждый раз,Как только у меня есть весь список, я просто смотрю на список.

Вы могли бы проверить, можете ли вы загрузить модуль, но мне, как правило, это не нравится, потому что я не хочупотенциально запустите код модуля, чтобы увидеть, установлен ли он.Хотя обычно это не проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...