2008-09-25 85 views
48

如何找到已安裝的Perl模塊的版本?如何找到已安裝的Perl模塊的版本?

這是在底部的答案,但我認爲它足夠重要,住在這裏。有了這些建議,我創造我.bashrc

function perlmodver { 
    perl -M$1 -e 'print "Version " . $ARGV[0]->VERSION . " of " . $ARGV[0] . \ 
    " is installed.\n"' $1 
} 
+1

參見http://stackoverflow.com/questions/ 1920045 /如何獲取版本和位置的安裝perl模塊 – Ether 2009-12-29 01:02:22

回答

52

爲什麼你想獲得該模塊的版本?你是否需要在程序中使用它,你只需要將該號碼傳遞給另一個操作,或者你只是想知道你有什麼?

我有這個內置到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。

50

大多數模塊(從CPAN特別是那些)函數有一個$ VERSION變量:

perl -MSome::Module -le 'print $Some::Module::VERSION' 
+1

這是最好的方式 – dns 2013-05-05 16:01:29

+3

這不是抽象的任何模塊工作。不正確的答案。 – 2014-02-17 18:49:29

+3

這工作。但是,在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

8

如果你是幸運的,該模塊都會有一個命名包變量$ VERSION

$ perl -MCPAN -e 'print "$CPAN::VERSION\n"' 
1.9205 

這是需要的模塊要在CPAN分發,但內部開發的莫杜爾斯可能會遵循不同的約定,或者根本不會。

+0

這對於在CPAN上分發的模塊實際上並不需要。許多發行版都會查看該變量來聲明版本,但只有發行版中的主要模塊需要這樣做。例如,查看Mojolicious中不是Mojolicuous.pm的任何模塊。 – 2016-11-03 00:53:32

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 
0

此外,對於使用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 ... 
16

有一個不太打字技巧,即工程提供你的模塊沒有什麼瘋狂的像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. 

(絕招我從馬特鱒教訓。)

+0

我也一直在使用這個很久了。不記得我從哪裏拿起它,但最有可能我從同一個地方得到它。 – rjray 2008-09-26 02:50:03

28

VERSION是所有Perl類的UNIVERSAL方法。您可以使用它來獲取模塊版本(如果已經設置了它通常的版本)。

這裏是一個班輪在你只有一次添加模塊名稱:

perl -le 'eval "require $ARGV[0]" and print $ARGV[0]->VERSION' Some::Module 
3

退房CPAN上pmtools腳本。如果您使用的是Debian(基於)的發行版,那麼還有一個方便的pmtools package。這包括一個腳本「pmvers」,告訴你一個模塊的版本。這非常方便。

它的功能類似於發佈的各種單行版本,但它對於錯誤處理有點聰明,並且可以同時爲您提供多個模塊的版本。

5

感謝您的答案!我創建了一個功能,在我的.bashrc容易地找到一個Perl模塊的版本:Solaris 10中

function perlmodver { 
    perl -M$1 -e 'print $ARGV[0]->VERSION . "\n"' $1 
} 
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"; 

} 
0

您還可以看看App::module::version

$ module-version 

The version of App::module::version in /home/yourself/perl5/lib/perl5 is 1.004 
1

最容易記住,最可靠的版本對我來說:

perl -e 'use Search::Elasticsearch; print $Search::Elasticsearch::VERSION;'