我如何find已安装的Perl模块的版本?
你如何find已安装的Perl模块的版本?
这是在底部的答案,但我认为足够重要的是活在这里。 有了这些build议,我在我的.bashrc
创build了一个函数
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 文字:: CSV_XS -------------------------------------------------- ----------------------- 快速8位干净版本的文本:: CSV H / HM / HMBRAND /文本CSV_XS-0.54.tgz /usr/local/lib/perl5/site_perl/5.8.8/darwin-2level/Text/CSV_XS.pm 安装:0.32 CPAN:0.54不是最新的 H.Merijn品牌(HMBRAND) hmbrand@xs4all.nl
如果您想查看所有过期的模块,请使用-O
(大写O)开关:
$ cpan -O 模块名称本地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 ... 等等
如果您想要查看已安装的所有模块,请尝试使用-a
开关创build自动装箱。
大多数模块(特别是来自CPAN的模块)都有一个$ VERSIONvariables:
perl -MSome::Module -le 'print $Some::Module::VERSION'
VERSION是所有Perl类的通用方法。 您可以使用它来获取模块版本(如果它已经被设置,通常有)。
这里是一个你只需要添加一个模块名称的class轮:
perl -le 'eval "require $ARGV[0]" and print $ARGV[0]->VERSION' Some::Module
有一个较less的input技巧,这个工作提供你的模块没有像Unix时间戳那样疯狂的版本号。
perl -MFoo::Bar\ 9999
这工作,因为它是什么翻译
use Foo::Bar 9999;
即Foo :: Bar的版本至less为9999或更新版本。 而你得到的是
Foo::Bar version 9999 required--this is only version 1.1. BEGIN failed--compilation aborted.
(我从马特·特劳特那里学到的巧妙技巧。)
如果幸运的话,模块将会有一个名为$ VERSION的包variables:
$ perl -MCPAN -e 'print "$CPAN::VERSION\n"' 1.9205
这是在CPAN上分发模块所需要的,但是内部开发的模块可能遵循不同的约定,或者根本不采用。
感谢您的答案! 我在.bashrc中创build了一个函数来轻松地findPerl模块的版本:
function perlmodver { perl -M$1 -e 'print $ARGV[0]->VERSION . "\n"' $1 }
查看CPAN上的pmtools脚本。 如果您使用的是Debian(基于)的发行版,那么也有一个方便的pmtools软件包 。 这包括一个脚本“pmvers”,告诉你一个模块的版本。 这非常方便。
它的作用类似于发布的各种单行版本,但是对于error handling来说更聪明一点,并且可以一次给你多个模块的版本。
我写了一个小脚本来报告: perlver 。
这是一个简单的小工具,告诉你已安装的模块的版本以及.pm文件的位置。 这也确保模块可以被成功加载。 它会自动将“ – ”,“/”或“\”转换为“::”,以便您可以使用path名或分布名称而不是规范模块名称。
它假定模块定义了$ 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
我们在Solaris 10中有perl(/ usr / bin / perl)系统,上面的解决scheme是没用的。 其中一些报告“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"; }
另外,对于使用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 ...
你也可以看看App :: module :: version
$ module-version The version of App::module::version in /home/yourself/perl5/lib/perl5 is 1.004