it-swarm.com.de

Wie finde ich die Version eines installierten Perl-Moduls?

Wie finden Sie die Version eines installierten Perl-Moduls?

Dies ist eine Antwort unten, aber ich finde es wichtig genug, um hier oben zu leben. Mit diesen Vorschlägen erstelle ich eine Funktion in meinem .bashrc

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

Warum versuchen Sie, die Version des Moduls zu erhalten? Benötigen Sie dies aus einem Programm heraus, benötigen Sie nur die Nummer, um zu einer anderen Operation zu gelangen, oder versuchen Sie nur herauszufinden, was Sie haben?

Ich habe dies in die cpan (die mit Perl geliefert wird) mit dem -D-Schalter eingebaut, damit Sie die installierte Version und die aktuelle Version auf CPAN sehen können:

 $ cpan -D Text :: CSV_XS 

 Text :: CSV_XS 
-------------------------- -------------------------------------------
 Schnelle, saubere 8-Bit-Version von 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
 Installiert: 0,32 
 CPAN: 0,54 Nicht aktuell 
 H. Merijn Brand (HMBRAND) 
 [email protected]

Wenn Sie alle veralteten Module anzeigen möchten, verwenden Sie den Schalter -O (capital O):

 $ cpan -O 
 Modulname Lokales 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 
... und so weiter 

Wenn Sie dies für alle installierten Module anzeigen möchten, erstellen Sie mit dem Schalter -a eine Autobundle.

56
brian d foy

Die meisten Module (insbesondere die von The CPAN) haben eine $ VERSION-Variable:

Perl -MSome::Module -le 'print $Some::Module::VERSION'
56
zigdon

VERSION ist eine UNIVERSAL Methode aller Perl-Klassen. Sie können es verwenden, um die Modulversion abzurufen (falls festgelegt, was normalerweise eingestellt ist). 

Hier ist ein One-Liner, in dem Sie den Modulnamen nur einmal eingeben müssen:

Perl -le 'eval "require $ARGV[0]" and print $ARGV[0]->VERSION' Some::Module
33
jmcnamara

Es gibt einen weniger trickreichen Trick, der funktioniert, vorausgesetzt, Ihr Modul hat nicht etwas Verrücktes wie einen Unix-Zeitstempel als Versionsnummer.

Perl -MFoo::Bar\ 9999

Dies funktioniert, weil das, was es übersetzt, ist

use Foo::Bar 9999;

eine Version von Foo :: Bar, die mindestens Version 9999 oder neuer ist .. und was Sie erhalten, ist

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

(Netter Trick, den ich von Matt Trout gelernt habe.)

19
Penfold

Wenn Sie Glück haben, hat das Modul eine Paketvariable namens $ VERSION :

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

Dies ist für die Verteilung von Modulen auf CPAN erforderlich, aber intern entwickelte Module können einer anderen Konvention folgen oder gar nicht.

8
Jon Ericson

Danke für die Antworten! Ich habe eine Funktion in meinem .bashrc erstellt, um die Version eines Perl-Moduls leicht zu finden:

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

Schauen Sie sich die pmtools - Skripte im CPAN an. Wenn Sie eine Debian-basierte Distribution verwenden, gibt es auch ein praktisches pmtools package . Dazu gehört ein Skript "pmvers", das die Version eines Moduls angibt. Das ist sehr praktisch.

Es macht etwas Ähnliches wie die verschiedenen Einzeiler, die von Leuten gepostet werden, aber es ist ein bisschen schlauer bei der Fehlerbehandlung und kann Ihnen die Version von mehr als einem Modul gleichzeitig geben.

3
Dave Rolsky

Am einfachsten zu merken und die robusteste Version für mich:

Perl -e 'use Search::Elasticsearch; print $Search::Elasticsearch::VERSION;'
2
Jpsy

Ich habe ein kleines Skript geschrieben, um das zu melden: perlver .

Dies ist ein einfaches kleines Werkzeug, das sagt Ihnen, welche Version eines Moduls Sie haben installiert haben, und wo die .pm-Datei befindet sich. Es sorgt auch für das Modul kann erfolgreich geladen werden. Es konvertiert automatisch "-", "/" oder "\" Bis "::", damit Sie einen Pfadnamen verwenden können oder Verteilungsname anstelle von kanonischer Modulname.

Es wird davon ausgegangen, dass das Modul eine $ VERSION definiert. Wenn das Modul keine $ VERSION definiert, wird Ihnen trotzdem mitgeteilt, wo sich die .pm-Datei befindet, sodass Sie sie manuell überprüfen können. Sie können auch mehrere Module gleichzeitig prüfen:

$ 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
2
cjm

Wir haben das System Perl (/ usr/bin/Perl) in Solaris 10, und die obigen Lösungen sind unbrauchbar. Einige von ihnen melden "modul.pm ist nicht installiert", andere haben keine Ausgabe.

Hier ist der Code, der hilfreich ist, der alle Module und ihre Version auflisten kann.

#!/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";

}
1
BMW

Darüber hinaus können Sie für Module, die Exporter.pm verwenden, diese Informationen mit diesem Trick erhalten:

Perl -MSome::Module=99999 -ex
Some::Module version 99999 required--this is only version 1.9205 at ...

Bei Modulen, die Exporter.pm nicht verwenden, werden bei einem etwas längeren Trick dieselben Informationen angezeigt:

Perl -e'use Some::Module 99999'
Some::Module version 99999 required--this is only version 1.9205 at ...
1
tye

Sie können auch einen Blick auf App :: module :: version werfen.

$ module-version

The version of App::module::version in /home/yourself/Perl5/lib/Perl5 is 1.004
0
smonff