如何找到已安装的Perl模块的版本?如何找到已安装的Perl模块的版本?
这是在底部的答案,但我认为它足够重要,住在这里。有了这些建议,我创造我.bashrc
function perlmodver {
perl -M$1 -e 'print "Version " . $ARGV[0]->VERSION . " of " . $ARGV[0] . \
" is installed.\n"' $1
}
如何找到已安装的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) [email protected]
如果你想看到所有出的最新模块,使用-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
开关创建autobundle。
大多数模块(从CPAN特别是那些)函数有一个$ VERSION变量:
perl -MSome::Module -le 'print $Some::Module::VERSION'
这是最好的方式 – dns 2013-05-05 16:01:29
这不是抽象的任何模块工作。不正确的答案。 – 2014-02-17 18:49:29
这工作。但是,在Windows上,它应该引用不同的方式(例如[File :: Fetch](http://perldoc.perl.org/File/Fetch.html)):`perl -MFile :: Fetch -le“打印$ File :: Fetch :: VERSION“` - 双引号而不是单引号(否则,错误消息是结果:”无法找到字符串终结符“'”在EOF之前的任何位置,在-e行1.“) – 2015-04-16 20:16:58
如果你是幸运的,该模块都会有一个命名包变量$ VERSION:
$ perl -MCPAN -e 'print "$CPAN::VERSION\n"'
1.9205
这是需要的模块要在CPAN分发,但内部开发的莫杜尔斯可能会遵循不同的约定,或者根本不会。
这对于在CPAN上分发的模块实际上并不需要。许多发行版都会查看该变量来声明版本,但只有发行版中的主要模块需要这样做。例如,查看Mojolicious中不是Mojolicuous.pm的任何模块。 – 2016-11-03 00:53:32
我写了一个小脚本来报告: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
此外,对于使用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 ...
有一个不太打字技巧,即工程提供你的模块没有什么疯狂的像Unix时间戳为版本n红棕色。
perl -MFoo::Bar\ 9999
这工作,因为它转换为是
use Foo::Bar 9999;
即一个版本美孚::酒吧这至少版本9999或更高版本。 而你得到的是
Foo::Bar version 9999 required--this is only version 1.1.
BEGIN failed--compilation aborted.
(绝招我从马特鳟教训。)
我也一直在使用这个很久了。不记得我从哪里拿起它,但最有可能我从同一个地方得到它。 – rjray 2008-09-26 02:50:03
VERSION是所有Perl类的UNIVERSAL方法。您可以使用它来获取模块版本(如果已经设置了它通常的版本)。
这里是一个班轮在你只有一次添加模块名称:
perl -le 'eval "require $ARGV[0]" and print $ARGV[0]->VERSION' Some::Module
退房CPAN上pmtools脚本。如果您使用的是Debian(基于)的发行版,那么还有一个方便的pmtools package。这包括一个脚本“pmvers”,告诉你一个模块的版本。这非常方便。
它的功能类似于发布的各种单行版本,但它对于错误处理有点聪明,并且可以同时为您提供多个模块的版本。
感谢您的答案!我创建了一个功能,在我的.bashrc容易地找到一个Perl模块的版本:Solaris 10中
function perlmodver {
perl -M$1 -e 'print $ARGV[0]->VERSION . "\n"' $1
}
我们有系统的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";
}
您还可以看看App::module::version
$ module-version
The version of App::module::version in /home/yourself/perl5/lib/perl5 is 1.004
最容易记住,最可靠的版本对我来说:
perl -e 'use Search::Elasticsearch; print $Search::Elasticsearch::VERSION;'
参见http://stackoverflow.com/questions/ 1920045 /如何获取版本和位置的安装perl模块 – Ether 2009-12-29 01:02:22