Pergunta

Como você encontrar a versão de um módulo Perl instalado?

Esta é em um baixo resposta na parte inferior, mas eu acho que o suficiente importante viver aqui em cima. Com estas sugestões, eu criar uma função no meu .bashrc

function perlmodver {
    perl -M$1 -e 'print "Version " . $ARGV[0]->VERSION . " of " . $ARGV[0] . \
    " is installed.\n"' $1
}
Foi útil?

Solução

Por que você está tentando obter a versão do módulo? Você precisa desta dentro de um programa, você só precisa do número para passar para outra operação, ou você está apenas tentando descobrir o que você tem?

Eu tenho esta embutido no cpan (que vem com perl) com o interruptor -D assim você pode ver a versão que você instalou e a versão atual no 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

Se você quiser ver todos os módulos de out-of-date, use a opção -O (capital O):

$ 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

Se você quiser ver este para todos os módulos que você tenha instalado, tente o interruptor -a para criar um autobundle.

Outras dicas

A maioria dos módulos (especialmente os do CPAN) tem uma variável $ VERSION:

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

VERSÃO é um UNIVERSAL método de todas as classes Perl. Você pode usá-lo para obter a versão do módulo (se ele tiver sido definido que normalmente tem).

Aqui está um um forro onde você só tem que adicionar o nome do módulo uma vez:

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

Existe um truque menos digitação, que funciona desde que o módulo não tem algo louco como um timestamp Unix como um número de versão.

perl -MFoo::Bar\ 9999

Isso funciona porque o que se traduz em é

use Foo::Bar 9999;

i. uma versão do Foo :: Bar que é pelo menos a versão 9999 ou mais recente. E o que você recebe é

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

(truque que aprendi com Matt Trout.)

Se você tiver sorte, o módulo terá uma variável de pacote chamado $ VERSÃO :

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

Isto é necessário para os módulos a serem distribuídos no CPAN, mas internamente módulos desenvolvidos pode seguir uma convenção ou nada diferente em tudo.

Obrigado pelas respostas! Eu criei uma função no meu .bashrc para mais facilmente encontrar a versão de um módulo Perl:

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

Confira os pmtools scripts em CPAN. Se você estiver usando uma distro Debian (baseados), há também um prático pmtools pacote . Isso inclui um script "pmvers" que lhe diz a versão de um módulo. É bastante útil.

Ele faz algo semelhante aos vários one-liners pessoas postadas, mas é um pouco mais inteligente sobre a manipulação de erros, e pode dar-lhe a versão de mais de um módulo ao mesmo tempo.

Eu escrevi um pequeno script para relatório que:. perlver

Esta é uma ferramenta simples e pequeno que diz-lhe qual a versão de um módulo que você ter instalado, e onde o arquivo .pm está localizado. Além disso, garante o módulo pode ser carregado com êxito. isto converte automaticamente ‘-’, ‘/’, ou ‘\’ Para ‘::’, assim você pode usar um nome de caminho ou nome da distribuição em vez do canônica nome do módulo.

Ela assume que o módulo define um $ VERSÃO. Se o módulo não definir um $ VERSÃO, ele ainda vai lhe dizer onde o arquivo .pm é, para que possa examiná-lo manualmente. Você também pode verificar vários módulos ao mesmo tempo:

$ 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

mais fácil de lembrar e versão mais robusta para mim:

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

Além disso, para os módulos que o uso Exporter.pm, você pode obter esta informação com este truque:

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

Para os módulos que não usam Exporter.pm, um truque pouco mais longa relata a mesma informação:

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

Nós temos o sistema de perl (/ usr / bin / perl) no Solaris 10, e acima de soluções são inúteis. Alguns deles relatam "module.pm não está instalado", alguns deles não têm saída.

Aqui está o código que é útil, que pode listar todos os módulos e sua versão.

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

}

Você também pode dar uma olhada em App :: módulo :: versão

$ module-version

The version of App::module::version in /home/yourself/perl5/lib/perl5 is 1.004
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top