Wie kann ich die Version eines installierten Perl-Modul finden?
Frage
Wie finden Sie die Version eines installierten Perl-Modul?
Dies ist in einer Antwort am unteren Rand nach unten, aber ich glaube es wichtig genug, um hier 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
}
Lösung
Warum versuchen Sie die Version des Moduls zu bekommen? Sie benötigen diese aus einem Programm, benötigen Sie nur die Nummer zu einem anderen Betrieb zu passieren, oder sind Sie nur versuchen, herauszufinden, was Sie haben?
Ich habe dies in den cpan
gebaut (die mit Perl kommt) mit dem -D
Schalter, so dass Sie die Version sehen können, die Sie installiert haben und die aktuelle Version auf 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
Wenn Sie möchten, dass alle die out-of-date-Module, um zu sehen, verwenden Sie die -O
(Kapital O) Schalter:
$ 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
Wenn Sie dies für alle Module sehen wollen, die Sie installiert haben, versuchen Sie den -a
Schalter einen autobundle zu erstellen.
Andere Tipps
Die meisten Module (vor allem jene aus dem CPAN) eine $ VERSION Variable:
perl -MSome::Module -le 'print $Some::Module::VERSION'
VERSION ist ein UNIVERSAL Methode aller Perl-Klassen. Sie können es verwenden, um die Modul Version zu erhalten (wenn es gesetzt worden ist, die es in der Regel hat).
Hier ist ein Motto, wo man nur einmal die Modulnamen hinzufügen:
perl -le 'eval "require $ARGV[0]" and print $ARGV[0]->VERSION' Some::Module
Es gibt eine weniger Typisierung Trick, die Ihre Modul funktioniert nicht über etwas verrückt wie ein Unix-Zeitstempel als Versionsnummer.
perl -MFoo::Bar\ 9999
Das funktioniert, weil, was übersetzt es ist
use Foo::Bar 9999;
d. eine Version von Foo :: Bar, die mindestens in der Version 9999 oder höher ist. Und was man bekommt, ist
Foo::Bar version 9999 required--this is only version 1.1.
BEGIN failed--compilation aborted.
(Ordentlich Trick, den ich von Matt Trout gelernt.)
Wenn Sie Glück haben, wird das Modul ein Paket Variable mit dem Namen hat $ VERSION :
$ perl -MCPAN -e 'print "$CPAN::VERSION\n"'
1.9205
Dies ist für die Module benötigt auf CPAN verteilt werden, sondern intern entwickelte Module könnten überhaupt eine andere Konvention oder keiner folgen.
Danke für die Antworten! Ich habe eine Funktion in meinem .bashrc erstellt, um bequem die Version einer Perl-Modul zu finden:
function perlmodver {
perl -M$1 -e 'print $ARGV[0]->VERSION . "\n"' $1
}
Schauen Sie sich die pmtools Skripte auf CPAN. Wenn Sie eine Debian (-Basis) Distro verwenden, gibt es auch eine praktische pmtools Paket . Dazu gehört auch ein Skript „pmvers“, dass Sie ein Modul-Version erzählt. Es ist ganz praktisch.
Es macht etwas Ähnliches auf die verschiedenen Einzeiler Leute geschrieben, aber es ist ein bisschen schlauer zur Fehlerbehandlung, und Sie können sofort die Version von mehr als einem Modul geben.
Ich schrieb ein kleines Skript, das zu berichten. perlver
Dies ist ein einfaches kleines Tool, das sagen Sie, welche Version eines Moduls Sie installiert haben, und wo die Datei .pm befindet sich. Es sorgt auch für das Modul erfolgreich geladen werden. Es automatisch konvertiert ‚-‘, ‚/‘, oder ‚\‘ Zu ‚::‘, so dass Sie einen Pfadnamen verwenden können, oder Verteilernamen anstelle der kanonische Modulnamen.
Es geht davon aus, dass das Modul eine $ VERSION definiert. Wenn das Modul nicht eine $ VERSION nicht definiert, wird es noch sagen, wo die .pm
Datei ist, so können Sie es manuell prüfen. Sie können auch mehrere Module auf einmal überprü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
Am einfachsten erinnern und robusteste Version für mich:
perl -e 'use Search::Elasticsearch; print $Search::Elasticsearch::VERSION;'
Darüber hinaus ist für Module, die Exporter.pm verwenden, können Sie diese Informationen mit diesem Trick erhalten:
perl -MSome::Module=99999 -ex
Some::Module version 99999 required--this is only version 1.9205 at ...
Für Module, die nicht Exporter.pm verwendet ein etwas längerer Trick berichtet die gleichen Informationen:
perl -e'use Some::Module 99999'
Some::Module version 99999 required--this is only version 1.9205 at ...
Wir haben das System perl (/ usr / bin / perl) in Solaris 10, und über Lösungen sind nutzlos. Einige von ihnen berichten „module.pm nicht installiert ist“, einige von ihnen keinen Ausgang haben.
Hier ist der Code, die hilfreich ist, die alle Module und deren Versionsliste können.
#!/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";
}
Sie können auch einen Blick auf App :: Modul :: Version nehmen
$ module-version
The version of App::module::version in /home/yourself/perl5/lib/perl5 is 1.004