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
}
Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top