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
}
È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top