Как я могу найти версию установленного модуля Perl?
Как вы находите версию установленного модуля Perl?
это в ответе внизу, но я считаю, что это достаточно важно, чтобы жить здесь. С помощью этих предложений я создаю функцию в my .bashrc
function perlmodver {
perl -M -e 'print "Version " . $ARGV[0]->VERSION . " of " . $ARGV[0] .
" is installed.n"'
}
12 ответов
почему вы пытаетесь получить версию модуля? Вам нужно это из программы, вам просто нужен номер, чтобы перейти к другой операции, или вы просто пытаетесь узнать, что у вас есть?
у меня это встроено в 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
переключатель для создания autobundle.
большинство модулей (особенно из 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.
(ловкий трюк я узнал от Мэтта форель.)
Если Вам ПОВЕЗЕТ, модуль будет иметь переменную пакета с именем $VERSION:
$ perl -MCPAN -e 'print "$CPAN::VERSION\n"'
1.9205
это необходимо для модулей, которые будут распространяться на CPAN, но внутренне разработанные модули могут следовать другому соглашению или вообще не следовать.
Спасибо за ответы! Я создал функцию в своем .bashrc, чтобы легко найти версию модуля Perl:
function perlmodver {
perl -M -e 'print $ARGV[0]->VERSION . "\n"'
}
Проверьте pmtools скрипты на CPAN. Если вы используете дистрибутив Debian (на основе), есть также удобный pmtools пакета. Это включает в себя скрипт "pmvers", который сообщает вам версию модуля. Это очень удобно.
Он делает что-то похожее на различные однострочные люди, опубликованные, но это немного умнее об обработке ошибок, и может дать вам версию более одного модуля сразу.
Я написал небольшой скрипт, чтобы сообщить, что: perlver.
Это простой маленький инструмент, который говорит вам, какая версия модуля вы установили, и где то .файл pm размещенный. Он также обеспечивает модуль может быть загружен успешно. Он автоматически преобразует ‘-’, ‘/’, или '\'to'::’, поэтому вы можете использовать путь или имя дистрибутива вместо каноническое имя модуля.
предполагается, что модуль определяет $ВЕРСИЯ. Если модуль не определяет $VERSION, он все равно скажет вам, где , Так что вы можете проверить его вручную. Вы также можете проверить сразу несколько модулей:
$ 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 (/usr/bin/perl) в Solaris 10, и вышеуказанные решения бесполезны. Некоторые из них сообщают " модуль.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";
}
самый простой для запоминания и самый надежный вариант для меня:
perl -e 'use Search::Elasticsearch; print $Search::Elasticsearch::VERSION;'
кроме того, для модулей, использующих экспортер.pm, вы можете получить эту информацию с помощью этого трюка:
perl -MSome::Module=99999 -ex
Some::Module version 99999 required--this is only version 1.9205 at ...
для модулей, которые не используют экспортер.pm, немного более длинный трюк сообщает ту же информацию:
perl -e'use Some::Module 99999'
Some::Module version 99999 required--this is only version 1.9205 at ...
вы также можете посмотреть App:: module:: version
$ module-version
The version of App::module::version in /home/yourself/perl5/lib/perl5 is 1.004