Saber que Módulos están Instalados

Existen varias soluciones al problema de conocer si un módulo está instalado:

Module::Util

Si Module::Util está instalado, use pm_which:

lhp@europa:~$ pm_which GRID::Machine
/usr/local/share/perl/5.8.8/GRID/Machine.pm

Use perldoc

Para saber si un módulo está instalado y donde se encuentra (supuesto que el módulo contiene documentación en su interior) use perldoc -l:

lhp@nereida:~/LHPbook$ perldoc -l Parse::Yapp
/usr/local/share/perl/5.8.4/Parse/Yapp.pm
lhp@nereida:~/LHPbook$ perldoc -l Parse::Yapp::Output
No documentation found for "Parse::Yapp::Output".
lhp@nereida:~/LHPbook$ ls /usr/local/share/perl/5.8.4/Parse/Yapp/Output.pm
/usr/local/share/perl/5.8.4/Parse/Yapp/Output.pm
lhp@nereida:~/LHPbook$

Simplemente: Use el Módulo

También puede comprobar la existencia cargando el módulo:

lhp@nereida:~/Lperl/src/ExtUtils$ perl -MNoexiste -e 1
Can't locate Noexiste.pm in @INC (@INC contains: /etc/perl ...
BEGIN failed--compilation aborted.
lhp@nereida:~/Lperl/src/ExtUtils$ perl -MYAML -e 1
lhp@nereida:~/Lperl/src/ExtUtils$

Use el módulo ExtUtils::Installed

El módulo ExtUtils::Installed proporciona diversos métodos para manejar los módulos Perl instalados. Escriba el siguiente guión:

lhp@nereida:~/Lperl/src/ExtUtils$ cat -n pminst
 1  #!/usr/local/bin/perl
 2  use strict;
 3  use ExtUtils::Installed;
 4
 5  my $instmod = ExtUtils::Installed->new();
 6
 7  foreach my $module ($instmod->modules()) {
 8    my $version = $instmod->version($module) || "???";
 9    print "$module $version\n";
10  }
Ahora podemos averiguar que módulos instalados contienen la palabra ''soap'':
lhp@nereida:~/Lperl/src/ExtUtils$ pminst | grep -i soap
SOAP 0.28
SOAP::Lite 0.60

El Conjunto de Utilidades pmtools

Instale pmtools y use el comando pminst. Se puede obtener en http://search.cpan.org/~mlfisher/pmtools/.

Sigue un ejemplo de uso:

pp2@nereida:~/src/perl/IPC-PerlSSH/lib/IPC$ pmdesc IPC::PerlSSH # descripción
IPC::PerlSSH (0.05) - a class for executing remote perl code over an SSH link
pp2@nereida:~/src/perl/coro$ pminst moize
Aspect::Library::Memoize
pp2@nereida:~/src/perl/IPC-PerlSSH/lib/IPC$ pmload IPC::PerlSSH  # Que modulos carga
/usr/share/perl/5.8/Carp.pm
/usr/share/perl/5.8/IPC/Open3.pm
/usr/share/perl/5.8/IPC/Open2.pm
/usr/share/perl/5.8/Exporter.pm
/usr/share/perl/5.8/strict.pm
/usr/local/share/perl/5.8.8/IPC/PerlSSH.pm
/usr/share/perl/5.8/Symbol.pm

Módulos en el Núcleo de Perl

En ocasiones no basta con saber que el módulo está instalado. Necesitamos saber si pertenece o no al núcleo de Perl. El método first_release del módulo Module::CoreList da respuesta a esta pregunta:

nereida:~> perl -MModule::CoreList -e \
   'print Module::CoreList->first_release("Data::Dumper")."\n"'
5.005
Mejor aún, use el programa corelist que acompaña a dicho módulo:
$ corelist Data::Dumper

Data::Dumper was first released with perl 5.005



Subsecciones
Casiano Rodríguez León
2009-10-04