¿Cómo puedo encontrar la versión de un módulo Perl instalado?
Pregunta
¿Cómo encuentra la versión de un módulo Perl instalado?
Esto está en una respuesta en la parte inferior, pero creo que es lo suficientemente importante como para vivir aquí. Con estas sugerencias, creo una función en mi .bashrc
function perlmodver {
perl -M$1 -e 'print "Version " . $ARGV[0]->VERSION . " of " . $ARGV[0] . \
" is installed.\n"' $1
}
Solución
¿Por qué intentas obtener la versión del módulo? ¿Necesita esto desde dentro de un programa, solo necesita el número para pasar a otra operación, o simplemente está tratando de averiguar lo que tiene?
Tengo esto integrado en el cpan
(que viene con perl) con el interruptor -D
para que pueda ver la versión que ha instalado y la versión actual en CPAN:
$ cpan -D Text::CSV_XS Text::CSV_XS ------------------------------------------------------------------------- Fast 8bit clean version of Text::CSV H/HM/HMBRAND/Text-CSV_XS-0.54.tgz /usr/local/lib/perl5/site_perl/5.8.8/darwin-2level/Text/CSV_XS.pm Installed: 0.32 CPAN: 0.54 Not up to date H.Merijn Brand (HMBRAND) h.m.brand@xs4all.nl
Si desea ver todos los módulos desactualizados, use el interruptor -O
(mayúscula):
$ cpan -O Module Name Local CPAN ------------------------------------------------------------------------- Apache::DB 0.1300 0.1400 Apache::SOAP 0.0000 0.7100 Apache::Session 1.8300 1.8700 Apache::SizeLimit 0.0300 0.9100 Apache::XMLRPC::Lite 0.0000 0.7100 ... and so on
Si desea ver esto para todos los módulos que ha instalado, pruebe el interruptor -a
para crear un auto-paquete.
Otros consejos
La mayoría de los módulos (especialmente los de The CPAN) tienen una variable $ VERSION:
perl -MSome::Module -le 'print $Some::Module::VERSION'
VERSIÓN es un método de UNIVERSAL de todas las clases de Perl. Puede usarlo para obtener la versión del módulo (si se ha configurado, lo que generalmente tiene).
Aquí hay un liner donde solo tiene que agregar el nombre del módulo una vez:
perl -le 'eval "require $ARGV[0]" and print $ARGV[0]->VERSION' Some::Module
Hay un truco de menos escritura, que funciona siempre y cuando su módulo no tenga una locura como la marca de tiempo de Unix como número de versión.
perl -MFoo::Bar\ 9999
Esto funciona porque lo que se traduce es
use Foo::Bar 9999;
es decir, una versión de Foo :: Bar que sea al menos la versión 9999 o más reciente. Y lo que obtienes es
Foo::Bar version 9999 required--this is only version 1.1.
BEGIN failed--compilation aborted.
(Truco limpio que aprendí de Matt Trout.)
Si tiene suerte, el módulo tendrá una variable de paquete llamada $ VERSION :
$ perl -MCPAN -e 'print "$CPAN::VERSION\n"'
1.9205
Esto es necesario para que los módulos se distribuyan en CPAN, pero los módulos desarrollados internamente pueden seguir una convención diferente o ninguno en absoluto.
Gracias por las respuestas! He creado una función en mi .bashrc para encontrar fácilmente la versión de un módulo Perl:
function perlmodver {
perl -M$1 -e 'print $ARGV[0]->VERSION . "\n"' $1
}
Consulte las secuencias de comandos pmtools en CPAN. Si está utilizando una distribución Debian (basada en), también hay un útil pmtools paquete . Esto incluye una secuencia de comandos " pmvers " Eso te dice la versión de un módulo. Es bastante práctico.
Hace algo similar a las diversas personas de una línea publicadas, pero es un poco más inteligente sobre el manejo de errores y puede ofrecerle la versión de más de un módulo a la vez.
Escribí un pequeño script para informar que: perlver .
Esta es una pequeña herramienta simple que te dice qué versión de un módulo te han instalado, y donde el archivo .pm se encuentra. También asegura el módulo. se puede cargar con éxito. Eso Convierte automáticamente & # 8216; - & # 8217 ;, & # 8216; / & # 8217 ;, o & # 8216; \ & # 8217; a & # 8216; :: & # 8217 ;, para que pueda usar una ruta de acceso o nombre de la distribución en lugar de la Nombre del módulo canónico.
Se supone que el módulo define una $ VERSION. Si el módulo no define una VERSIÓN de $, aún le indicará dónde se encuentra el archivo .pm
, para que pueda examinarlo manualmente. También puedes consultar varios módulos a la vez:
$ perlver CPAN DBD-Pg Getopt::Long
CPAN 1.7602 is
/usr/lib/perl5/5.8.8/CPAN.pm
DBD::Pg 1.49 is
/usr/lib/perl5/vendor_perl/5.8.8/i686-linux/DBD/Pg.pm
Getopt::Long 2.36 is
/usr/lib/perl5/vendor_perl/5.8.8/Getopt/Long.pm
La versión más fácil de recordar y más robusta para mí:
perl -e 'use Search::Elasticsearch; print $Search::Elasticsearch::VERSION;'
Además, para los módulos que usan Exporter.pm, puede obtener esta información con este truco:
perl -MSome::Module=99999 -ex
Some::Module version 99999 required--this is only version 1.9205 at ...
Para los módulos que no usan Exporter.pm, un truco un poco más largo reporta la misma información:
perl -e'use Some::Module 99999'
Some::Module version 99999 required--this is only version 1.9205 at ...
Tenemos el sistema perl (/ usr / bin / perl) en Solaris 10, y las soluciones anteriores son inútiles. Algunos de ellos informan que " module.pm no está instalado " ;, algunos de ellos no tienen salida.
Aquí está el código que es útil, que puede enumerar todos los módulos y su versión.
#!/usr/bin/perl
use strict;
use ExtUtils::Installed;
my @modules;
my $installed = ExtUtils::Installed->new();
if (scalar(@ARGV) > 0) {
@modules = @ARGV;
} else {
@modules = $installed->modules();
}
print "Module\tVersion\n";
foreach (@modules) {
print Tenemos el sistema perl (/ usr / bin / perl) en Solaris 10, y las soluciones anteriores son inútiles. Algunos de ellos informan que " module.pm no está instalado " ;, algunos de ellos no tienen salida.
Aquí está el código que es útil, que puede enumerar todos los módulos y su versión.
<*> . "\t" . $installed->version( Tenemos el sistema perl (/ usr / bin / perl) en Solaris 10, y las soluciones anteriores son inútiles. Algunos de ellos informan que " module.pm no está instalado " ;, algunos de ellos no tienen salida.
Aquí está el código que es útil, que puede enumerar todos los módulos y su versión.
<*>) . "\n";
}
También puede consultar App :: module :: version
$ module-version
The version of App::module::version in /home/yourself/perl5/lib/perl5 is 1.004