インストールされているPerlモジュールのバージョンを確認するにはどうすればよいですか?
質問
インストールされている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";
}
$ module-version
The version of App::module::version in /home/yourself/perl5/lib/perl5 is 1.004