Как я могу найти версию установленного модуля Perl?

StackOverflow https://stackoverflow.com/questions/135755

  •  02-07-2019
  •  | 
  •  

Вопрос

Как вы находите версию установленного модуля Perl?

Это содержится в ответе внизу, но я считаю, что это достаточно важно, чтобы жить здесь.Используя эти предложения, я создаю функцию в своем .bashrc

function perlmodver {
    perl -M$1 -e 'print "Version " . $ARGV[0]->VERSION . " of " . $ARGV[0] . \
    " is installed.\n"' $1
}
Это было полезно?

Решение

Почему вы пытаетесь получить версию модуля?Вам нужно это из программы, вам просто нужно число для перехода к другой операции, или вы просто пытаетесь выяснить, что у вас есть?

У меня это встроено в cpan (который поставляется с perl) с помощью -D переключитесь, чтобы вы могли видеть версию, которую вы установили, и текущую версию на 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

Если вы хотите просмотреть все устаревшие модули, используйте -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

Если вы хотите увидеть это для всех установленных вами модулей, попробуйте -a переключитесь на создание автоматической связки.

Другие советы

Большинство модулей (особенно из CPAN) имеют переменную $VERSION:

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

ВЕРСИЯ представляет собой Универсальный метод всех классов Perl.Вы можете использовать его, чтобы получить версию модуля (если она была установлена, как это обычно бывает).

Вот однострочник, в котором вам нужно добавить имя модуля только один раз:

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

Существует трюк с меньшим набором текста, который работает при условии, что в вашем модуле нет чего-то безумного вроде метки времени Unix в качестве номера версии.

perl -MFoo::Bar\ 9999

Это работает, потому что это переводится как

use Foo::Bar 9999;

т. е.версия Foo::Bar, по крайней мере, версии 9999 или новее.И что вы получаете, это

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

(Ловкий трюк, которому я научился у Мэтта Траута.)

Если вам повезет, модуль будет иметь переменную пакета с именем $ВЕРСИЯ:

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

Это необходимо для распространения модулей по CPAN, но внутренне разработанные модули могут соответствовать другому соглашению или вообще отсутствовать.

Спасибо за ответы!Я создал функцию в my .bashrc, чтобы легко находить версию модуля Perl:

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

Посмотрите на инструменты pmtools скрипты на CPAN.Если вы используете дистрибутив на базе Debian, есть также удобный инструменты pmtools упаковка.Это включает в себя скрипт "pmvers", который сообщает вам версию модуля.Это очень удобно.

Он делает что-то похожее на различные однострочники, опубликованные пользователями, но он немного умнее в обработке ошибок и может предоставить вам версию более чем одного модуля одновременно.

Я написал небольшой скрипт, чтобы сообщить об этом: перлвер.

Это простой маленький инструмент, который сообщает вам, какую версию модуля вы установили и где находится файл .pm .Это также гарантирует, что модуль может быть успешно загружен.Он автоматически преобразует ‘-’, ‘/’ или ‘\’ в ‘::’, так что вы можете использовать путь или имя дистрибутива вместо канонического имени модуля.

Предполагается, что модуль определяет $VERSION.Если модуль не определяет $VERSION, он все равно сообщит вам, где находится .pm файл есть, так что вы можете просмотреть его вручную.Вы также можете проверить сразу несколько модулей:

$ 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

Самая простая для запоминания и надежная версия для меня:

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

Кроме того, для модулей, использующих Exporter.pm, вы можете получить эту информацию с помощью этого трюка:

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

Для модулей, которые не используют Exporter.pm, немного более длинный трюк сообщает ту же информацию:

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

У нас есть системный perl (/usr/bin /perl) в Solaris 10, и вышеприведенные решения бесполезны.Некоторые из них сообщают "module.pm не установлен", некоторые из них не имеют выходных данных.

Вот полезный код, в котором могут быть перечислены все модули и их версии.

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

}

Вы также можете взглянуть на Приложение:: модуль:: версия

$ module-version

The version of App::module::version in /home/yourself/perl5/lib/perl5 is 1.004
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top