如何找到已安装的Perl模块的版本?
这是在底部的答案,但我认为重要的是在这里居住。有了这些建议,我在.bashrc
function perlmodver {
perl -M$1 -e 'print "Version " . $ARGV[0]->VERSION . " of " . $ARGV[0] . \
" is installed.\n"' $1
}
答案 0 :(得分:58)
为什么要尝试获取模块的版本?你是否需要在一个程序中使用它,你只需要将数字传递给另一个操作,或者你只是想知道你有什么?
我已将此内置于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
(大写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
开关创建自动提示。
答案 1 :(得分:56)
大多数模块(尤其是来自CPAN的模块)都有一个$ VERSION变量:
perl -MSome::Module -le 'print $Some::Module::VERSION'
答案 2 :(得分:33)
VERSION是所有Perl类的UNIVERSAL方法。您可以使用它来获取模块版本(如果已经设置了它通常具有)。
这是一个只需要添加模块名称一次的单行程序:
perl -le 'eval "require $ARGV[0]" and print $ARGV[0]->VERSION' Some::Module
答案 3 :(得分:21)
有一个打字较少的技巧,如果您的模块没有像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.
(我从Matt Trout那里学到了很多技巧。)
答案 4 :(得分:8)
如果运气好,该模块将有一个名为 $ VERSION 的包变量:
$ perl -MCPAN -e 'print "$CPAN::VERSION\n"'
1.9205
这需要在CPAN上分发模块,但内部开发的模块可能遵循不同的约定或根本不遵循。
答案 5 :(得分:6)
感谢您的回答!我在.bashrc中创建了一个函数,以便轻松找到Perl模块的版本:
function perlmodver {
perl -M$1 -e 'print $ARGV[0]->VERSION . "\n"' $1
}
答案 6 :(得分:3)
查看CPAN上的pmtools脚本。如果你使用的是Debian(基于)的发行版,那么还有一个方便的pmtools package。这包括一个脚本“pmvers”,它告诉你模块的版本。它非常方便。
它的功能类似于发布的各种单行人员,但它在错误处理方面更为智能,并且可以同时为您提供多个模块的版本。
答案 7 :(得分:2)
我写了一个小脚本来报告:perlver。
这是一个简单的小工具 告诉你你的模块版本 已安装,以及.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
答案 8 :(得分:2)
最简单的记忆和最强大的版本:
perl -e 'use Search::Elasticsearch; print $Search::Elasticsearch::VERSION;'
答案 9 :(得分:1)
此外,对于使用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 ...
答案 10 :(得分:1)
我们在Solaris 10中有系统perl(/ usr / bin / perl),上面的解决方案都没用。其中一些报告“未安装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";
}
答案 11 :(得分:0)
您还可以查看App::module::version
$ module-version
The version of App::module::version in /home/yourself/perl5/lib/perl5 is 1.004