web-dev-qa-db-fra.com

Comment trouver la version d'un module Perl installé?

Comment trouvez-vous la version d'un module Perl installé?

C’est une réponse au bas de la page, mais je pense que c’est assez important pour vivre ici. Avec ces suggestions, je crée une fonction dans mon .bashrc

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

Pourquoi essayez-vous d'obtenir la version du module? Avez-vous besoin de cela dans un programme, avez-vous juste besoin du numéro pour passer à une autre opération, ou essayez-vous simplement de savoir ce que vous avez?

Je l'ai intégré dans la cpan (fournie avec Perl) avec le commutateur -D afin que vous puissiez voir la version que vous avez installée et la version actuelle sur CPAN:

 $ cpan -D Text :: CSV_XS 

 Text :: CSV_XS 
-------------------------- -----------------------------------------------
 Version propre 8 bits rapide de 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
 Installé: 0.32 
 CPAN: 0.54 Pas à jour 
 H. Merijn Brand (HMBRAND) 
 [email protected]

Si vous souhaitez voir tous les modules obsolètes, utilisez le commutateur -O (majuscule O):

 $ cpan -O 
 Nom du module CPAN local 
------------------------------------- ----------------------------------------------. 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 
... et ainsi de suite 

Si vous souhaitez voir cela pour tous les modules que vous avez installés, essayez le commutateur -a pour créer un regroupement automatique.

56
brian d foy

La plupart des modules (en particulier ceux du CPAN) ont une variable $ VERSION:

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

VERSION est une méthode UNIVERSAL de toutes les classes Perl. Vous pouvez l'utiliser pour obtenir la version du module (si elle a été définie, ce qu'elle a généralement). 

Voici un one-liner où il suffit d'ajouter le nom du module une fois:

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

Il y a un truc moins typé, qui fonctionne à condition que votre module n'ait pas quelque chose de fou comme un horodatage Unix comme numéro de version.

Perl -MFoo::Bar\ 9999

Cela fonctionne parce que ce que cela traduit est

use Foo::Bar 9999;

c'est-à-dire une version de Foo :: Bar qui est au moins la version 9999 ou plus récente . Et ce que vous obtenez est

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

(Astuce j'ai appris de Matt Trout.)

19
Penfold

Si vous avez de la chance, le module aura une variable de package nommée $ VERSION :

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

Cela est nécessaire pour que les modules soient distribués sur CPAN, mais les modules développés en interne peuvent suivre une convention différente, voire aucune.

8
Jon Ericson

Merci pour les réponses! J'ai créé une fonction dans mon .bashrc pour trouver facilement la version d'un module Perl:

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

Découvrez les pmtools scripts sur CPAN. Si vous utilisez une distribution Debian (à base), il existe également un paquet pratique pmtools . Cela inclut un script "pmvers" qui vous indique la version d'un module. C'est assez pratique.

Il fait quelque chose de similaire aux différentes personnes figurant sur la liste, mais il est un peu plus intelligent sur la gestion des erreurs et peut vous donner la version de plusieurs modules à la fois.

3
Dave Rolsky

Version la plus facile à retenir et la plus robuste pour moi:

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

J'ai écrit un petit script pour signaler que: perlver .

C'est un petit outil simple qui vous indique quelle version d'un module vous ont installé et où se trouve le fichier .pm est situé. Il assure également le module peut être chargé avec succès. Il convertit automatiquement «-», «/» ou "\" À "::", vous pouvez donc utiliser un chemin ou le nom de la distribution au lieu du nom du module canonique.

Il suppose que le module définit une $ VERSION. Si le module ne définit pas une $ VERSION, il vous indiquera toujours où se trouve le fichier .pm, afin que vous puissiez l'examiner manuellement. Vous pouvez également vérifier plusieurs modules à la fois:

$ 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

Nous avons le système Perl (/ usr/bin/Perl) dans Solaris 10 et les solutions ci-dessus sont inutiles. Certains rapportent "module.pm n'est pas installé", d'autres n'ont pas de sortie.

Voici le code qui est utile, qui peut lister tous les modules et leur version.

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

De plus, pour les modules qui utilisent Exporter.pm, vous pouvez obtenir ces informations avec cette astuce:

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

Pour les modules qui n'utilisent pas Exporter.pm, une astuce légèrement plus longue renvoie les mêmes informations:

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

Vous pouvez également consulter App :: module :: version

$ module-version

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