2012-02-09 3 views
5

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

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

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

ответ

5

Вы должны использовать строковую форму eval потому require нужен bareword аргумент в соответствии с двойной толстой кишкой отделенной формы имя модуля (например, Scalar::Util). (Если это не bareword, то он должен быть относительным путем, например '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"; 
    } 
} 
+0

'defined' не требуется. – ikegami

+2

'require' принимает выражение, которое не является делом, но оно должно оценивать имя файла. (например, 'Smart/Comments.pm' вместо' Smart :: Comments') – ikegami

1

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

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

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

Смежные вопросы