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
}
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.
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 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
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.)
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
}
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.
Version la plus facile à retenir et la plus robuste pour moi:
Perl -e 'use Search::Elasticsearch; print $Search::Elasticsearch::VERSION;'
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
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";
}
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 ...
Vous pouvez également consulter App :: module :: version
$ module-version
The version of App::module::version in /home/yourself/Perl5/lib/Perl5 is 1.004