2016-12-14 11 views
2

はじめに:モジュールの特定のバージョンをロードする方法を知っています。それは私が後になったことではありません。Perlでは、すでにロードされている特定のモジュールのモジュールバージョンをどのようにして知ることができますか?

私の会社の社内サーバーからJSON形式のテキスト/プレーンデータを取得するスクリプトを作成しています。私はデータ検索のためにLWPを使用しています。

私はすべてのスクリプトを実行しましたが、問題は1つあります。

私はこれをRHEL5に書いています。これはPerl 5.8.8とLWP 5.805を使用しています。以下のページで、レスポンスの内容をファイルに直接出力したい場合は、:content_file => filename

以下に注意してください。このこと

注:LWP 5.66使用を追加することを検討する必要がありますので、「content_file」オプションは、LWPの古い バージョンでサポートされていません。 のLWPバージョンをチェックしてください。あなたのプログラムが 古いバージョンのシステムで動作すると思われる場合は、

あなたが同じことを行い、この 構文、使用した後、古いLWPのバージョンとの互換性が必要な場合:これはRHEL 5であるので

use HTTP::Request::Common; $response = $ua->request(GET($url), $filespec);

を、私は古いを使用する必要がありますLWP形式ですが、RHEL 6以上で実行されている古いスタイルの代わりに新しいスタイルを使用するようにスクリプトを作成したいと考えています。これは:content_fileをサポートする新しいバージョンのLWPを使用しています。

は、したがって、私はモジュールのバージョンを検出する方法を知っておく必要があり、そしてもっと重要なのは、私がサポートする最も古いLWPバージョンが何であるかを知っておく必要があり:content_file

+0

コメントが示唆しているようにして、 'use HTTP :: Request :: Common; $ response = $ ua-> request(GET($ url)、$ filespec); '(バージョンに関係なく)? – ikegami

+0

これは古いバージョンの場合のみです。私は新しいバージョンがそれをサポートしているとは思わない。 – Speeddymon

+0

コメントの詳細は、新しいバージョンが下位互換性があることを示しています。 – Speeddymon

答えて

6

LWP::UserAgentのバージョン番号は、パッケージ変数$LWP::UserAgent::VERSIONであり、モジュールをロードするためにと記述した場合は、$LWP::VERSIONを使用できます。

ただし、異なるバージョンのモジュールに異なる方法を使用する理由はありません。下位互換性の代替

my $response = $ua->request(GET($url), $filespec) 

は、すべてのオブジェクトがUNIVERSALから延びているので、あなたはバージョンを取得するだけで$ua->VERSIONを行うことができます任意のバージョン

+0

新しいバージョンが下位互換性があることを認識していませんでした。明日RHEL 6と7でそれを撃つだろう。それがうまくいくなら、私はこれを答えにします。 – Speeddymon

+0

今日はRHEL6でこれを確認できました。洞察力のある答えをありがとう。 – Speeddymon

+0

ちなみに、この解決方法もあなたの質問で引用しました。 xD –

6

で正常に動作します。

:content_file5.66に追加されたようです。 5.655.66の間のドキュメントを比較してください。

+0

はい、これは任意のモジュールのバージョンを取得する正しい方法です。 (規則では、モジュールは、 '$ VERSION'パッケージ変数を持っているためであり、それはUNIVERSAL VERSIONメソッドは、実際にチェックするものだが、場合には、モジュールは、クラスメソッドは、正式な答えを与える呼び出し、VERSIONクラスのメソッドをオーバーライドします。) – ysth

+1

@ysthそれは、CPANインデクサーが ' - > VERSION'ではなく' $ VERSION'からバージョンを取得して以来、希望的な考え方です。 – ikegami

+0

@ikegamiはモジュール版ではなくディストリビューションです – ysth

関連する問題