2008-09-25 13 views
48

¿Cómo se encuentra la versión de un módulo Perl instalado?¿Cómo puedo encontrar la versión de un módulo Perl instalado?

Esto es en una respuesta abajo en la parte inferior, pero me parece lo suficientemente importante como para vivir aquí. Con estas sugerencias, crear una función en mis .bashrc

function perlmodver { 
    perl -M$1 -e 'print "Version " . $ARGV[0]->VERSION . " of " . $ARGV[0] . \ 
    " is installed.\n"' $1 
} 
+1

Véase también http://stackoverflow.com/questions/ 1920045/how-can-i-get-the-version-and-location-of-an-installed-perl-module – Ether

Respuesta

52

Por qué estás tratando de 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 solo está tratando de averiguar lo que tiene?

esto he incorporado en el cpan (que viene con Perl) con el interruptor -D para que pueda ver la versión que tiene instalada 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) 
     [email protected] 

Si quieres ver todos los módulos fuera de fecha, utilice el -O (O mayúscula) interruptor:

 
$ 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 quieres ver esto para todos los módulos que haya instalado, pruebe el interruptor -a para crear un autobundle.

+1

(¡Sé que esta es una respuesta antigua!) Intenté -D y -O y cpan no entendieron esas opciones. La página de manual mostró las opciones pero el perldoc no. ¿Lo que da? – Mei

+0

¿La página de manual y el perldoc van con diferentes versiones? –

50

mayoría de los módulos (especialmente los de la CPAN) tener una variable $ VERSIÓN:

perl -MSome::Module -le 'print $Some::Module::VERSION' 
+1

Esta es la mejor manera de hacerlo – dns

+3

para que funcione con cualquier módulo. no es la respuesta correcta. –

+3

Esto funciona. Sin embargo, en Windows debería citarse de manera diferente para que funcione (ejemplo para [File :: Fetch] (http://perldoc.perl.org/File/Fetch.html)): 'perl -MFile :: Fetch -le" print $ File :: Fetch :: VERSION "' - comillas dobles en lugar de comillas simples (de lo contrario, un mensaje de error es el resultado: "No se puede encontrar el terminador de cadena" '"en cualquier lugar antes de EOF en -e línea 1.") –

8

Si tiene suerte, el módulo tendrá una variable de paquete llamado $ VERSIÓN:

$ perl -MCPAN -e 'print "$CPAN::VERSION\n"' 
1.9205 

Esto es necesario para los módulos que se distribuirá en CPAN, pero internamente desarrollado mo dules podría seguir una convención diferente o ninguna en absoluto.

+0

Esto no es realmente necesario para que los módulos se distribuyan en CPAN. Muchas distribuciones miran esa variable para declarar la versión, pero solo el módulo principal en la distribución necesita hacer eso. Mire cualquiera de los módulos en Mojolicious que no son Mojolicuous.pm, por ejemplo. –

2

Escribí una pequeña secuencia de comandos para informar que: perlver.

Esta es una pequeña herramienta simple que te dice qué versión de un módulo que ha instalado, y donde el archivo se encuentra .pm . También garantiza que el módulo se pueda cargar correctamente. Es convierte automáticamente '-', '/' o '\' a '::', por lo que puede usar una ruta de acceso o nombre de distribución en lugar del nombre de módulo canónico.

Asume que el módulo define $ VERSIÓN. Si el módulo no define $ VERSIÓN, aún le indicará dónde se encuentra el archivo .pm, de modo que puede examinarlo manualmente. También puede comprobar 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 
0

Además, para los módulos que utilizan 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 utilizan Exporter.pm, un truco un poco más largo informa la misma información:

perl -e'use Some::Module 99999' 
Some::Module version 99999 required--this is only version 1.9205 at ... 
16

Hay un truco menos escribir, que funciona siempre y cuando su módulo no tiene algo loco como una marca de tiempo Unix como una versión n ocre oscuro.

perl -MFoo::Bar\ 9999 

Esto funciona porque lo que se traduce en que es

use Foo::Bar 9999; 

es decir, una versión de Foo :: Bar que es al menos la versión 9999 o posterior. Y lo que se obtiene es

Foo::Bar version 9999 required--this is only version 1.1. 
BEGIN failed--compilation aborted. 

(Buen truco que aprendí de Matt trucha.)

+0

He estado usando esto durante años, también. No recuerdo de dónde lo saqué, pero lo más probable es que lo obtuve del mismo lugar. – rjray

+0

Cambio menor para un símbolo del sistema de Windows (por cualquier razón): perl -M "Foo :: bar 9999" – igelkott

+0

@igelkott: Esto funcionó con [File :: Fetch] (http://perldoc.perl.org/ File/Fetch.html), 'perl -M" File :: Fetch 9999 "' (64 bits Perl 5.18). Salida: 'File :: Fetch versión 9999 requerida: esta es solo la versión 0.46. Sin embargo, la segunda línea, "BEGIN failed - compilation aborted.", Es confusa a primera vista (enumerada en la respuesta). –

28

VERSIÓN es un método UNIVERSAL de todas las clases de Perl. Puede usarlo para obtener la versión del módulo (si se ha configurado, que generalmente tiene).

Aquí es un chiste en el que sólo tiene que añadir el nombre del módulo una vez:

perl -le 'eval "require $ARGV[0]" and print $ARGV[0]->VERSION' Some::Module 
+0

Gracias, eso es todo lo que estaba buscando :) – coredump

+0

¡Esto es EXACTAMENTE lo que necesitaba! – farhany

+1

Esta es la respuesta correcta. –

3

Mira la pmtools scripts en CPAN. Si está utilizando una distribución Debian (basada en), también hay un práctico pmtools package. Esto incluye un script "pmvers" que te dice la versión de un módulo. Es bastante útil

Hace algo similar a los amigos de una sola línea publicados, pero es un poco más inteligente sobre el manejo de errores, y puede darle la versión de más de un módulo a la vez.

5

Gracias por las respuestas! He creado una función en mi .bashrc para encontrar fácilmente la versión de un módulo de Perl:

function perlmodver { 
    perl -M$1 -e 'print $ARGV[0]->VERSION . "\n"' $1 
} 
1

Tenemos el sistema de Perl (/ usr/bin/perl) en Solaris 10 y 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 mostrar 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 $_ . "\t" . $installed->version($_) . "\n"; 

} 
0

También puede echar un vistazo a App::module::version

$ module-version 

The version of App::module::version in /home/yourself/perl5/lib/perl5 is 1.004 
1

más fácil de recordar y versión más robusta para mí:

perl -e 'use Search::Elasticsearch; print $Search::Elasticsearch::VERSION;' 
Cuestiones relacionadas