Как вы находите версию установленного модуля 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) [email protected]
Если вы хотите увидеть все устаревшие модули, используйте переключатель -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
Если вы хотите увидеть это для всех установленных вами модулей, попробуйте использовать переключатель -a
, чтобы создать автозапуск.
Большинство модулей (особенно из списка CPAN) имеют переменную $VERSION:
perl -MSome::Module -le 'print $Some::Module::VERSION'
VERSION - это метод UNIVERSAL всех классов 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$1 -e 'print $ARGV[0]->VERSION . "\n"' $1
}
Просмотрите pmtools скрипты на CPAN. Если вы используете дистрибутив Debian (на основе), также есть удобный пакет pmtools. Это включает script "pmvers", который сообщает вам версию модуля. Это очень удобно.
Он делает что-то похожее на разных однострочных пользователей, но он немного умнее об обработке ошибок и может предоставить вам версию более чем одного модуля за один раз.
Я написал небольшой script, чтобы сообщить, что: perlver.
Это простой инструмент, который расскажет вам, какую версию модуля вы установили и где файл .pm расположен. Он также обеспечивает модуль может быть успешно загружена. Это автоматически преобразует '-,'/, или '\ To'::, поэтому вы можете использовать имя пути или имя распространения вместо имя канонического модуля.
Предполагается, что модуль определяет $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;'
У нас есть система 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";
}
Вы также можете взглянуть на App:: module:: version
$ module-version
The version of App::module::version in /home/yourself/perl5/lib/perl5 is 1.004
Кроме того, для модулей, использующих 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 ...