2012-02-09 14 views
5

Zrobiłem skrypt, aby intymować administratora listę modułów, które należy zainstalować na komputerze.Sprawdź listę modułów zainstalowanych w komputerze

Próbuję sprawdzić, czy moduł jest zainstalowany pod kodem pod spodem. Najdziwniejsze jest to, że pokazuje nawet zainstalowanego modułu w maszynie jako 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"; 
     } 
    } 

Odpowiedz

5

Trzeba skorzystać z formularza ciąg eval ponieważ require potrzebuje argumentu gołe słowo pasujące przeciwko dwukrotnie rozdzielonych dwukropkami postaci z nazwa modułu (np. Scalar::Util). (Jeśli to nie jest gołe słowo, to musi być względną ścieżkę, np '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

'określony' nie jest wymagany. – ikegami

+2

'require' akceptuje wyrażenie, które nie jest bareword, ale musi ocenić na nazwę pliku. (np. 'Smart/Comments.pm' zamiast' Smart :: Comments') – ikegami

1

Jest moja App::Module::Lister, którą zaprojektowano jako modulino że może działać jako moduł, narzędzie wiersza poleceń, lub skrypt CGI. To prosta rzecz, której potrzebowałem dla przyjaciela, który miał tylko dostęp FTP do serwera WWW.

Daje listę wszystkich elementów w ścieżce wyszukiwania modułów Perla, które zazwyczaj łatwiej znajduję niż sprawdzanie poszczególnych modułów za każdym razem. Kiedy już mam całą listę, po prostu patrzę na listę.

Ty mógł sprawdzić, które można załadować moduł, ale staram się nie podoba, bo nie chcą potencjalnie uruchomić kod modułu, aby zobaczyć, czy jest zainstalowany. Zwykle nie stanowi to problemu.

Powiązane problemy