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

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

C’est dans une réponse au bas, 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 } 

Pourquoi essayez-vous d’obtenir la version du module? Avez-vous besoin de cela dans un programme, avez-vous simplement 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 le cpan (fourni avec perl) avec le commutateur -D pour que vous puissiez voir la version que vous avez installée et la version actuelle sur CPAN:

 $ cpan -D Text :: CSV_XS

 Texte :: CSV_XS
 -------------------------------------------------- -----------------------
         Version 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
         Marque H.Merijn (HMBRAND)
         hmbrand@xs4all.nl

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
 ... etc

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

La plupart des modules (particulièrement ceux du CPAN) ont une variable $ VERSION:

 perl -MSome::Module -le 'print $Some::Module::VERSION' 

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é configurée de manière habituelle).

Voici une seule page où il suffit d’append le nom du module une seule fois:

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

Il y a une astuce moins typée, qui fonctionne à condition que votre module n’ait pas quelque chose de fou comme un horodatage Unix en tant que numéro de version.

 perl -MFoo::Bar\ 9999 

Cela fonctionne parce que ce que cela signifie 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 que j’ai apprise de Matt Trout.)

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 dissortingbués sur le CPAN, mais les modules développés en interne peuvent suivre une convention différente, voire pas du tout.

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

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

Découvrez les scripts pmtools sur CPAN. Si vous utilisez une dissortingbution Debian (basée sur), il y a aussi un paquet pratique pmtools . Cela inclut un script “pmvers” qui vous indique la version d’un module. C’est très pratique.

Il fait quelque chose de similaire aux différents utilisateurs de one-line, mais il est un peu plus intelligent en matière de gestion des erreurs et peut vous donner la version de plusieurs modules à la fois.

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

Ceci est un petit outil simple qui vous indique quelle version d’un module vous avez installé et où se trouve le fichier .pm. Il garantit également que le module peut être chargé avec succès. Il convertit automatiquement ‘-‘, ‘/’ ou ‘\’ en ‘::’, vous pouvez donc utiliser un nom de chemin ou de dissortingbution au lieu du nom du module canonique.

Cela suppose que le module définit une $ VERSION. Si le module ne définit pas de $ 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 

Nous avons le système perl (/ usr / bin / perl) dans Solaris 10 et les solutions ci-dessus sont inutiles. Certains rapportent que “module.pm n’est pas installé”, certains d’entre eux n’ont pas de sortie.

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

 #!/usr/bin/perl use ssortingct; 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"; } 

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

 perl -e 'use Search::Elasticsearch; print $Search::Elasticsearch::VERSION;' 

De plus, pour les modules qui utilisent Exporter.pm, vous pouvez obtenir cette information 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 rapporte les mêmes informations:

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

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

 $ module-version The version of App::module::version in /home/yourself/perl5/lib/perl5 is 1.004