Как я могу найти версию установленного модуля Perl?
Вопрос
Как вы находите версию установленного модуля 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