インストールされているPerlモジュールのバージョンをどのように見つけますか?
これは一番下の答えにありますが、私はここに住むのに十分重要だと思います。これらの提案を使用して、自分の関数を作成します.bashrc
function perlmodver {
perl -M$1 -e 'print "Version " . $ARGV[0]->VERSION . " of " . $ARGV[0] . \
" is installed.\n"' $1
}
ほとんどのモジュール(特にCPANのモジュール)には$VERSION変数があります。
perl -MSome::Module -le 'print $Some::Module::VERSION'
モジュールのバージョンを取得しようとしているのはなぜですか? プログラム内からこれが必要ですか、別の操作に渡すために番号が必要ですか、それとも自分が持っているものを見つけようとしているだけですか?
インストールしたバージョンと CPAN の現在のバージョンを確認できるようcpan
に、スイッチを使用してこれを (perl に付属) に組み込みました。-D
$ cpan -D Text::CSV_XS テキスト::CSV_XS -------------------------------------------------- ----------------------- Text::CSV の高速な 8 ビット クリーン バージョン H/HM/HMBRAND/Text-CSV_XS-0.54.tgz /usr/local/lib/perl5/site_perl/5.8.8/darwin-2level/Text/CSV_XS.pm インストール済み: 0.32 CPAN: 0.54 最新ではありません H.Merijn ブランド (HMBRAND) hmbrand@xs4all.nl
古いモジュールをすべて表示したい場合は、-O
(大文字の O) スイッチを使用します。
$ cpan -O モジュール名 ローカル CPAN -------------------------------------------------- ----------------------- アパッチ::DB 0.1300 0.1400 アパッチ::SOAP 0.0000 0.7100 アパッチ::セッション 1.8300 1.8700 アパッチ::サイズリミット 0.0300 0.9100 Apache::XMLRPC::Lite 0.0000 0.7100 ... 等々
インストールしたすべてのモジュールについてこれを確認したい場合は-a
、自動バンドルを作成するスイッチを試してください。
VERSION は、すべての Perl クラスのUNIVERSALメソッドです。これを使用して、モジュールのバージョンを取得できます (通常のバージョンが設定されている場合)。
モジュール名を一度だけ追加する必要があるワンライナーを次に示します。
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
}
私にとって最も覚えやすく、最も堅牢なバージョン:
perl -e 'use Search::Elasticsearch; print $Search::Elasticsearch::VERSION;'
CPANのpmtoolsスクリプトをチェックしてください。Debian(ベース)ディストリビューションを使用している場合は、便利なpmtoolsパッケージもあります。これには、モジュールのバージョンを通知するスクリプト「pmvers」が含まれます。とても便利です。
投稿されたさまざまなワンライナーの人々と似たようなことをしますが、エラー処理については少し賢く、一度に複数のモジュールのバージョンを提供できます。
それを報告するために小さなスクリプトを書きました: 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
さらに、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 $_ . "\t" . $installed->version($_) . "\n";
}
App::module::versionを見ることもできます
$ module-version
The version of App::module::version in /home/yourself/perl5/lib/perl5 is 1.004