62

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

これは一番下の答えにありますが、私はここに住むのに十分重要だと思います。これらの提案を使用して、自分の関数を作成します.bashrc

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

12 に答える 12

68

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

perl -MSome::Module -le 'print $Some::Module::VERSION'
于 2008-09-25T20:17:23.910 に答える
64

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

インストールしたバージョンと 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、自動バンドルを作成するスイッチを試してください。

于 2008-09-25T21:19:10.283 に答える
37

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

モジュール名を一度だけ追加する必要があるワンライナーを次に示します。

perl -le 'eval "require $ARGV[0]" and print $ARGV[0]->VERSION' Some::Module
于 2008-09-25T21:21:17.860 に答える
25

モジュールにバージョン番号として 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.

(マット・トラウトから学んだ巧妙なトリックです。)

于 2008-09-25T20:48:39.577 に答える
8

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

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

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

于 2008-09-25T20:19:31.410 に答える
6

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

function perlmodver {
    perl -M$1 -e 'print $ARGV[0]->VERSION . "\n"' $1
} 
于 2008-09-25T21:41:25.847 に答える
5

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

perl -e 'use Search::Elasticsearch; print $Search::Elasticsearch::VERSION;'
于 2017-11-20T16:52:49.163 に答える
3

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

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

于 2008-09-25T21:33:33.057 に答える
2

それを報告するために小さなスクリプトを書きました: 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
于 2008-09-25T20:33:27.617 に答える
1

さらに、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 ...
于 2008-09-25T20:43:51.350 に答える
1

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

}
于 2014-02-24T02:37:45.913 に答える
0

App::module::versionを見ることもできます

$ module-version

The version of App::module::version in /home/yourself/perl5/lib/perl5 is 1.004
于 2015-08-07T13:40:47.370 に答える