Come posso trovare la versione di un modulo Perl installato?
Domanda
Come si trova la versione di un modulo Perl installato?
Questa è una risposta in fondo, ma immagino che sia abbastanza importante vivere qui. Con questi suggerimenti, creo una funzione nel mio .bashrc
function perlmodver {
perl -M$1 -e 'print "Version " . $ARGV[0]->VERSION . " of " . $ARGV[0] . \
" is installed.\n"' $1
}
Soluzione
Perché stai cercando di ottenere la versione del modulo? Ti serve all'interno di un programma, hai solo bisogno del numero per passare a un'altra operazione o stai solo cercando di scoprire cosa hai?
L'ho incorporato nel cpan
(che viene fornito con perl) con l'opzione -D
in modo da poter vedere la versione che hai installato e la versione corrente su 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
Se vuoi vedere tutti i moduli non aggiornati, usa l'opzione -O
(O maiuscola):
$ 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
Se vuoi vedere questo per tutti i moduli che hai installato, prova l'opzione -a
per creare un autobundle.
Altri suggerimenti
La maggior parte dei moduli (specialmente quelli di The CPAN) hanno una variabile $ VERSION:
perl -MSome::Module -le 'print $Some::Module::VERSION'
VERSION è un UNIVERSAL di tutte le classi Perl. Puoi usarlo per ottenere la versione del modulo (se è stato impostato come di solito).
Ecco una riga in cui devi aggiungere il nome del modulo una sola volta:
perl -le 'eval "require $ARGV[0]" and print $ARGV[0]->VERSION' Some::Module
Esiste un trucco meno digitato, che funziona a condizione che il modulo non abbia qualcosa di folle come un timestamp Unix come numero di versione.
perl -MFoo::Bar\ 9999
Funziona perché ciò che si traduce in
use Foo::Bar 9999;
vale a dire. una versione di Foo :: Bar che è almeno la versione 9999 o più recente. E quello che ottieni è
Foo::Bar version 9999 required--this is only version 1.1.
BEGIN failed--compilation aborted.
(Trucco ordinato che ho imparato da Matt Trout.)
Se sei fortunato, il modulo avrà una variabile di pacchetto denominata $ VERSION :
$ perl -MCPAN -e 'print "$CPAN::VERSION\n"'
1.9205
Ciò è necessario affinché i moduli siano distribuiti su CPAN, ma i moduli sviluppati internamente potrebbero seguire una convenzione diversa o inesistente.
Grazie per le risposte! Ho creato una funzione nel mio .bashrc per trovare facilmente la versione di un modulo Perl:
function perlmodver {
perl -M$1 -e 'print $ARGV[0]->VERSION . "\n"' $1
}
Controlla gli script pmtools su CPAN. Se stai usando una distro Debian (basata su), c'è anche una pmtools pacchetto . Ciò include uno script "quot" pmvers " che ti dice la versione di un modulo. È abbastanza utile.
Fa qualcosa di simile alle varie persone con una sola riga postate, ma è un po 'più intelligente sulla gestione degli errori e può darti la versione di più di un modulo alla volta.
Ho scritto un piccolo script per segnalare che: perlver .
Questo è un piccolo strumento che ti dice quale versione di un modulo tu installato e in cui il file .pm si trova. Assicura anche il modulo può essere caricato con successo. esso converte automaticamente & # 8216; - & # 8217 ;, & # 8216; / & # 8217 ;, oppure & # 8216; \ & # 8217; a & # 8216; :: & # 8217 ;, così puoi usare un nome percorso o nome della distribuzione anziché il nome del modulo canonico.
Presuppone che il modulo definisca una $ VERSION. Se il modulo non definisce una $ VERSION, ti dirà comunque dove si trova il file .pm
, quindi puoi esaminarlo manualmente. Puoi anche controllare più moduli contemporaneamente:
$ 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
Versione più semplice da ricordare e più robusta per me:
perl -e 'use Search::Elasticsearch; print $Search::Elasticsearch::VERSION;'
Inoltre, per i moduli che utilizzano Exporter.pm, puoi ottenere queste informazioni con questo trucco:
perl -MSome::Module=99999 -ex
Some::Module version 99999 required--this is only version 1.9205 at ...
Per i moduli che non usano Exporter.pm, un trucco leggermente più lungo riporta le stesse informazioni:
perl -e'use Some::Module 99999'
Some::Module version 99999 required--this is only version 1.9205 at ...
Abbiamo il sistema perl (/ usr / bin / perl) in Solaris 10 e le soluzioni precedenti sono inutili. Alcuni di essi riportano " module.pm non è installato " altri non hanno output.
Ecco il codice che è utile, che può elencare tutti i moduli e la loro versione.
#!/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 Abbiamo il sistema perl (/ usr / bin / perl) in Solaris 10 e le soluzioni precedenti sono inutili. Alcuni di essi riportano " module.pm non è installato " altri non hanno output.
Ecco il codice che è utile, che può elencare tutti i moduli e la loro versione.
<*> . "\t" . $installed->version( Abbiamo il sistema perl (/ usr / bin / perl) in Solaris 10 e le soluzioni precedenti sono inutili. Alcuni di essi riportano " module.pm non è installato " altri non hanno output.
Ecco il codice che è utile, che può elencare tutti i moduli e la loro versione.
<*>) . "\n";
}
Puoi anche dare un'occhiata a App :: module :: version
$ module-version
The version of App::module::version in /home/yourself/perl5/lib/perl5 is 1.004