web-dev-qa-db-ja.com

インストールされているPerlモジュールのバージョンを確認するにはどうすればよいですか?

インストールされているPerlモジュールのバージョンをどのように見つけますか?

これは一番下の回答にありますが、ここで生きていくには十分に重要だと思います。これらの提案により、.bashrc

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

モジュールのバージョンを取得しようとしているのはなぜですか?プログラム内からこれが必要ですか、別の操作に渡すために番号だけが必要ですか、それともあなたが持っているものを見つけようとしていますか?

これは、cpan(Perlに付属)に-Dスイッチを使用すると、インストールしたバージョンとCPANの現在のバージョンを確認できます。

 $ cpan -D Text :: CSV_XS 
 
 Text :: CSV_XS 
 ------------------ -------------------------------------------------- ----- 
 Text :: CSV 
 H/HM/HMBRAND/Text-CSV_XS-0.54.tgz 
/usr/local/lib/Perl5の高速8ビットクリーンバージョン/site_Perl/5.8.8/darwin-2level/Text/CSV_XS.pm
インストール済み:0.32 
 CPAN:0.54最新ではない
 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: :ライト0.0000 0.7100 
 ...など

インストールしたすべてのモジュールについてこれを見たい場合は、-aスイッチで自動バンドルを作成します。

59
brian d foy

ほとんどのモジュール(特にCPANのモジュール)には$ VERSION変数があります。

Perl -MSome::Module -le 'print $Some::Module::VERSION'
57
zigdon

VERSIONは、すべてのPerlクラスの [〜#〜] universal [〜#〜] メソッドです。これを使用して、モジュールバージョンを取得できます(通常設定されている場合)。

モジュール名を1回追加するだけでよい1つのライナーを次に示します。

Perl -le 'eval "require $ARGV[0]" and print $ARGV[0]->VERSION' Some::Module
33
jmcnamara

タイプが少ないトリックがあります。これは、モジュールにバージョン番号としてのUnixタイムスタンプのような異常なものがない場合に機能します。

Perl -MFoo::Bar\ 9999

これは、翻訳されるものが

use Foo::Bar 9999;

つまり、少なくともバージョン9999以降のFoo :: Barのバージョンです。そして、あなたが得るものは

Foo::Bar version 9999 required--this is only version 1.1.
BEGIN failed--compilation aborted.

(マットトラウトから学んだ素敵なトリック。)

21
Penfold

運がよければ、モジュールには$ VERSIONという名前のパッケージ変数があります:

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

これは、CPANでモジュールを配布するために必要ですが、内部で開発されたモジュールは異なる規約に従うか、まったく規約に準拠しない場合があります。

8
Jon Ericson

答えてくれてありがとう! Perlモジュールのバージョンを簡単に見つけるために、.bashrcに関数を作成しました。

function perlmodver {
    Perl -M$1 -e 'print $ARGV[0]->VERSION . "\n"' $1
} 
6
Drew Stephens

CPANの pmtools スクリプトを確認してください。 Debian(ベース)ディストリビューションを使用している場合は、便利な pmtoolsパッケージ もあります。これには、モジュールのバージョンを通知するスクリプト「pmvers」が含まれます。とても便利です。

投稿されたさまざまなワンライナーの人々と似たようなことをしますが、エラー処理については少し賢く、一度に複数のモジュールのバージョンを提供できます。

3
Dave Rolsky

私にとって最も覚えやすく、最も堅牢なバージョン:

Perl -e 'use Search::Elasticsearch; print $Search::Elasticsearch::VERSION;'
2
Jpsy

それを報告する小さなスクリプトを書きました: 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
2
cjm

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";

}
1
BMW

さらに、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 ...
1
tye

App :: module :: version もご覧ください

$ module-version

The version of App::module::version in /home/yourself/Perl5/lib/Perl5 is 1.004
0
smonff