2009-09-04 5 views
5

はperlのうち少なくともバージョンXを持っている、あなたは以下のperlのバージョンがある値よりも大きくないことを確認する方法はありますか?スクリプトを確保するため

require 5.6.8; 

を行うことができますバージョンが新しすぎていないことを確認する最良の方法は何ですか? (バージョン5.8.x、ただし5.9または5.10は問題ありません)。

+3

私は、これは有用であろうその文脈で知りたいだろう。 Perlは下位互換性を維持するために、その道を離れる傾向があります。 –

+0

@JB理論的な理由:Perlのそれ以降のバージョンでは、予期しないバグが発生する可能性があります。たとえば、5.10.0にqr //に関連するメモリリークがありました。ロックされた環境では、既知のバグのある古いバージョンは、未知のバグの新しいバージョンよりも安全です。 –

+1

私の場合、私はperl 5.10で動作しないコンパイルされたライブラリの束を含むシステムを持っています。 –

答えて

23

のPerlのバージョンが5.8.9以上である場合には、このコードは死んでしまう。

die "woah, that is a little too new" unless $] <= 5.008009; 

あなたはperldoc perlvar$]についての詳細を読むことができます。

8

特殊な$^V変数を使用してバージョンを確認できます。

$^V 

The revision, version, and subversion of the Perl interpreter, represented as a 
version object. 

This variable first appeared in perl 5.6.0; earlier versions of perl will see an  
undefined value. Before perl 5.10.0 $^V was represented as a v-string. 

あなたは、例えば、文字列の比較で$^Vを使用することができます。perldoc perlvarから以前の5.6.0よりもperlの上で実行されている場合

if ($^V lt 'v5.10.0') 

、あなたは簡単な整数を返し$]を使用する必要があります。

+0

私は文字列比較がversion.pm(これは5.6+ perlの多くのバージョンが必ずしも持っていない)なしで動作するとは思わない。あなたは($^V lt v5.10.0)を意味しましたか?私は$ Vを$ Vに賛成する理由は見当たらない。 – ysth

+3

古いperlsを使用しようとしている場合、これは行く方法ではありません。 –

0

最も簡単な解決策は、これを行うには、次のようになります。

no 5.010; 
+2

実際には動作しません: 'no 5.011'を試してみて、' feature bundle "5.11.0"がPerl 5.10.0でサポートされていないというエラーが表示されます。むしろ壊れた.... – derobert

関連する問題