2012-02-09 16 views
5

He hecho una secuencia de comandos para intimar con el administrador la lista de módulos debe instalarse en la máquina.Verifique la lista del módulo instalado en la máquina

Estoy tratando de verificar si el módulo instalado por debajo del código. Lo curioso es que se está mostrando módulo incluso instalado en la máquina como 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"; 
     } 
    } 

Respuesta

5

Es necesario utilizar el formato de cadena de eval porque require necesita un argumento bareword a contrastar forma separada-doble de colon de la nombre del módulo (por ejemplo, Scalar::Util). (Si no es un bareword, entonces tiene que ser una ruta relativa, por ejemplo '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' no es necesario. – ikegami

+2

'require' acepta una expresión que no es una palabra clave, pero debe evaluar a un nombre de archivo. (por ejemplo, 'Smart/Comments.pm' en lugar de' Smart :: Comments') – ikegami

1

Ahí está mi App::Module::Lister, que he diseñado como un modulino que puede funcionar como un módulo, una utilidad de línea de comandos, o una secuencia de comandos CGI. Es algo simple que necesitaba para un amigo que solo tenía acceso FTP a un servidor web.

Le da la lista de todo en la ruta de búsqueda de módulos de Perl, que generalmente me resulta más fácil que buscar módulos específicos cada vez. Una vez que tengo toda la lista, simplemente miro la lista.

podría comprobar que puede cargar el módulo, pero tiendo a no me gusta porque no quiero ejecutar potencialmente el código del módulo para ver si está instalado. Por lo general, no es un problema.

Cuestiones relacionadas