Comment trouver la version d'un module Perl installé?
Question
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
}
La solution
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 cpan
(fourni 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 ------------------------------------------------------------------------- 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
Si vous souhaitez voir tous les modules obsolètes, utilisez le commutateur -O
(majuscule):
$ 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
Si vous souhaitez voir cela pour tous les modules que vous avez installés, essayez le commutateur -a
pour créer un autobundle.
Autres conseils
La plupart des modules (en particulier 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é définie, ce qu'elle a généralement).
Voici une seule ligne où il vous suffit d'ajouter le nom du module une fois:
perl -le 'eval "require $ARGV[0]" and print $ARGV[0]->VERSION' Some::Module
Il existe un truc moins typé, 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 car ce que cela traduit est
use Foo::Bar 9999;
i.e. 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 distribués sur CPAN, mais les modules développés en interne peuvent suivre une convention différente, voire aucune.
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
}
Consultez les scripts pmtools sur le réseau CPAN. Si vous utilisez une distribution Debian, un pmtools package . Cela inclut un script " pmvers " cela vous indique la version d'un module. C'est assez pratique.
Il a un comportement similaire à celui des différentes personnes figurant sur la liste, mais il est un peu plus intelligent en ce qui concerne la 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 dit quelle version d'un module vous ont installé, et où le fichier .pm est situé. Il assure également le module peut être chargé avec succès. Il convertit automatiquement & # 8216; - & # 8217 ;, & # 8216; / & # 8217 ;, ou & # 8216; \ & # 8217; to & # 8216; :: & # 8217 ;, afin que vous puissiez utiliser un chemin ou le nom de la distribution au lieu du nom du module canonique.
Cela suppose que le module définisse une $ VERSION. Si le module ne définit pas $ 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
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 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 ...
Nous avons le système perl (/ usr / bin / perl) dans Solaris 10 et les solutions ci-dessus sont inutiles. Certains signalent que "module.pm n'est pas installé", d'autres n'ont aucun résultat.
Voici le code utile, qui permet de répertorier 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 Nous avons le système perl (/ usr / bin / perl) dans Solaris 10 et les solutions ci-dessus sont inutiles. Certains signalent que "module.pm n'est pas installé", d'autres n'ont aucun résultat.
Voici le code utile, qui permet de répertorier tous les modules et leur version.
<*> . "\t" . $installed->version( Nous avons le système perl (/ usr / bin / perl) dans Solaris 10 et les solutions ci-dessus sont inutiles. Certains signalent que "module.pm n'est pas installé", d'autres n'ont aucun résultat.
Voici le code utile, qui permet de répertorier tous les modules et leur version.
<*>) . "\n";
}
Vous pouvez également consulter App :: module :: version
.$ module-version
The version of App::module::version in /home/yourself/perl5/lib/perl5 is 1.004