如何找到已安装的Perl模块的版本?
这是在底部的答案,但我认为它足够重要,住在这里.有了这些建议,我在my中创建了一个函数.bashrc
function perlmodver { perl -M$1 -e 'print "Version " . $ARGV[0]->VERSION . " of " . $ARGV[0] . \ " is installed.\n"' $1 }
brian d foy.. 60
你为什么试图获得该模块的版本?你是否需要在一个程序中使用它,你只需要将号码传递给另一个操作,或者你只是想找出你拥有的东西?
我将这个内置到了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
开关创建自动提示.
你为什么试图获得该模块的版本?你是否需要在一个程序中使用它,你只需要将号码传递给另一个操作,或者你只是想找出你拥有的东西?
我将这个内置到了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
开关创建自动提示.
大多数模块(尤其是来自CPAN的模块)都有一个$ VERSION变量:
perl -MSome::Module -le 'print $Some::Module::VERSION'
VERSION是所有Perl类的UNIVERSAL方法.您可以使用它来获取模块版本(如果已经设置了它通常具有).
这是一个单行,您只需添加一次模块名称:
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.
(我从Matt Trout那里学到了很多技巧.)
如果幸运的话,模块将有一个名为$ 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 }