mcpan - ¿Cómo puedo encontrar la versión de un módulo Perl instalado?
perl mcpan (12)
¿Cómo se encuentra la versión de un módulo Perl instalado?
Esto es en una respuesta abajo, 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
}
¿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?
Tengo este integrado en el cpan
(que viene con perl) con el -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) [email protected]
Si desea ver todos los módulos desactualizados, use el interruptor -O
(mayúscula O):
$ 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, intente con el interruptor -a
para crear una autobundle.
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 informa la misma información:
perl -e''use Some::Module 99999''
Some::Module version 99999 required--this is only version 1.9205 at ...
Consulte los scripts de pmtools en CPAN. Si está utilizando una distribución Debian (basada en), también hay un práctico paquete pmtools . Esto incluye un script "pmvers" que te dice la versión de un módulo. Es bastante útil
Hace algo similar a las personas de una línea publicadas, 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.
Escribí un pequeño guión para informar que: perlver .
Esta es una pequeña herramienta simple que le dice qué versión de un módulo ha instalado y dónde se encuentra el archivo .pm. También asegura que el módulo se puede cargar con éxito. Convierte automáticamente ''-'', ''/'' o ''/' en ''::'', por lo que puede usar un nombre de ruta o de distribución en lugar del nombre del módulo canónico.
Supone que el módulo define $ VERSIÓN. Si el módulo no define $ VERSIÓN, todavía le indicará dónde se encuentra el archivo .pm
, de modo que puede examinarlo manualmente. También puede verificar 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
Gracias por las respuestas! Creé 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
}
Hay un truco de menos tipeo, que funciona siempre que su módulo no tenga algo loco como una marca de tiempo 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 es 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.
(Buen truco que aprendí de Matt Trout).
La mayoría de los módulos (especialmente los de CPAN) tienen una variable $ VERSION:
perl -MSome::Module -le ''print $Some::Module::VERSION''
La versión más fácil de recordar y más robusta para mí:
perl -e ''use Search::Elasticsearch; print $Search::Elasticsearch::VERSION;''
Si tiene suerte, el módulo tendrá una variable de paquete llamada $ VERSIÓN :
$ 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 no tener ninguno.
También puedes echar un vistazo a App::module::version
$ module-version
The version of App::module::version in /home/yourself/perl5/lib/perl5 is 1.004
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 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";
}
VERSION 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í hay un trazador de líneas 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