インストールされているPerlモジュールのバージョンをどのように見つけますか?
これは一番下の回答にありますが、ここで生きていくには十分に重要だと思います。これらの提案により、.bashrc
function perlmodver {
Perl -M$1 -e 'print "Version " . $ARGV[0]->VERSION . " of " . $ARGV[0] . \
" is installed.\n"' $1
}
モジュールのバージョンを取得しようとしているのはなぜですか?プログラム内からこれが必要ですか、別の操作に渡すために番号だけが必要ですか、それともあなたが持っているものを見つけようとしていますか?
これは、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
スイッチで自動バンドルを作成します。
ほとんどのモジュール(特に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;
つまり、少なくともバージョン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」が含まれます。とても便利です。
投稿されたさまざまなワンライナーの人々と似たようなことをしますが、エラー処理については少し賢く、一度に複数のモジュールのバージョンを提供できます。
私にとって最も覚えやすく、最も堅牢なバージョン:
Perl -e 'use Search::Elasticsearch; print $Search::Elasticsearch::VERSION;'
それを報告する小さなスクリプトを書きました: 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
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";
}
さらに、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 ...
App :: module :: version もご覧ください
$ module-version
The version of App::module::version in /home/yourself/Perl5/lib/Perl5 is 1.004