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
}
War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top