5.10以降で書かれたPerlコードが5.8で実行されることを確認できますか?

StackOverflow https://stackoverflow.com/questions/3301082

  •  26-09-2020
  •  | 
  •  

質問

Perl 5.10および5.12の新機能のいくつかは、「Feature」プラグマを使用して明示的に有効または無許可できる機能として定義されています。しかし、Regexesの名前付きキャプチャグループのような他の追加機能は暗黙的です。

5.10以降のインタプリタを使用してPerlを書いているときは、5.8で実行したいのですが、5.8ではなく何でもないものを使用することについてPerlを不平のことにしますか。明らかに、あなたが実行するためにそれがそれを実行することを意図しているすべての主要なバージョンであなたのコードをテストすることは良い習慣ですが、それはまだPerlを自動的に警告するのがまだ良くなっています。

役に立ちましたか?

解決

Perlの特定のバージョンでプログラムを実行するようにしたい場合は、Perlのバージョンの下でテストします。 my href="http://search.cpan.org/dist/module-release" real="noreferrer">実際にアップロードする前に複数のPerlsの下でのアプリケーションテストの機能。

これはあなたが適切なテストスイートを持って十分なテストを書いていることを必要とします。 効果的なPerlプログラミングに表示されるので、同時にいくつかの別々のPerlインストールを維持することは簡単です。

test :: minimumversion が機能する可能性があるようにほとんど鳴りますが、いくつかの制限があります。 。それはあなたがそれを与えるファイルを調べます(したがって、あなたが読み込んだものは何も確認しません)、そして私は実際に正規表現パターンの中を見ているとは思わない。これらのレポートのそれぞれは、最小バージョンが5.004であることがあります。

#!perl

use Perl::MinimumVersion;

my $p_flag = <<'SOURCE';
'123' =~ m/[123]/p; # 5.10 feature
SOURCE

my $named_capture = <<'SOURCE';
'123' =~ m/(?<num>[123])/; # 5.10 feature
SOURCE

my $r_line_ending = <<'SOURCE';
'123' =~ m/[123]\R/p; # 5.12 feature
SOURCE

my $say = <<'SOURCE';
say 'Hello';
SOURCE

my $smart_match = <<'SOURCE';
$boolean = '123' ~~ @array;
SOURCE

my $given = <<'SOURCE';
given( $foo ) {
    when( /123/ ) { say 'Hello' }
    };

SOURCE

foreach my $source ( $p_flag, $named_capture, $r_line_ending, $say, $smart_match, $given ) {
    print "----Source---\n$source\n-----";
    my $version = Perl::MinimumVersion->new( \$source  )->minimum_version;
    print "Min version is $version\n";
    }
.

理由の一部 Perl :: MinimumVersion の作品は、ヒントを探すためです。ソースはそれを既にuse 5.010、およびuse featureなどに与えます。ただし、機能を有効にする唯一の方法ではありません。そして、あなたが注意しているように、少なくとも誰かがそれのチェックを追加するまで、それは少なくとも/pフラグのようなものを見逃しています。ただし、 ppi ソリューションで、常にそのようなものを追いかけているでしょう。

それをコンパイルし、テストを実行し、見つけることが簡単です。

他のヒント

コードを実行するときにPerlチェックをすることができるとは思わない チェックアウト perl :: minimumversion test :: minimumversion 。(後者はa href="http://search.cpan.org/perldoc?test::::::="nofollownoreferrer"> test :: builder 前者の周りのラッパー。)

その他の答えからの答えあなたの答えはnoですが、おそらく App :: Perlbrew テスト用に複数のバージョンのPerlをインストールして管理するのに役立ちます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top