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

StackOverflow https://stackoverflow.com/questions/135755

  •  02-07-2019
  •  | 
  •  

質問

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

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

に関数を作成します
function perlmodver {
    perl -M$1 -e 'print "Version " . $ARGV[0]->VERSION . " of " . $ARGV[0] . \
    " is installed.\n"' $1
}
役に立ちましたか?

解決

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

-D スイッチを使用して、これを cpan (perlに付属)に組み込んでいるので、インストールしたバージョンと現在のバージョンを確認できます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 スイッチを試してオートバンドルを作成してください。

他のヒント

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

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

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

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

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

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

perl -MFoo::Bar\ 9999

これは、翻訳対象が

であるため機能します
use Foo::Bar 9999;

i.e。少なくともバージョン9999以降のFoo :: Barのバージョン。 そして、あなたが得るものは

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

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

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

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

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

回答ありがとうございます! Perlモジュールのバージョンを簡単に見つけるために、.bashrcに関数を作成しました:

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

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

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

perlver を報告する小さなスクリプトを作成しました。

  

これはシンプルな小さなツールで、   モジュールのバージョンを教えてくれます   インストール済み、および.pmファイル   位置しています。また、モジュールを保証します   正常にロードできます。それ   ‘-’、‘ /&#8217 ;、または   ‘ \’ ‘ ::’へのパス名を使用できます   または   正規のモジュール名。

モジュールが$ 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

覚えやすい、最も堅牢なバージョン:

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

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

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 

Solaris 10にはシステムperl(/ usr / bin / perl)があり、上記のソリューションは役に立ちません。それらのいくつかは" module.pmがインストールされていません"を報告し、それらのいくつかは出力がありません。

これは便利なコードで、すべてのモジュールとそのバージョンをリストできます。

<*> . "\t" . $installed->version(

Solaris 10にはシステムperl(/ usr / bin / perl)があり、上記のソリューションは役に立ちません。それらのいくつかは&quot; module.pmがインストールされていません&quot;を報告し、それらのいくつかは出力がありません。

これは便利なコードで、すべてのモジュールとそのバージョンをリストできます。

<*>) . "\n"; }

App :: module :: version

もご覧ください。
$ module-version

The version of App::module::version in /home/yourself/perl5/lib/perl5 is 1.004
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top