1

誰かが私を助けてくれることを望んでいた古いバージョンの perl で私の perl スクリプトをコンパイルする際に問題が発生しているようです。私が最初に書いて問題なく perl ファイルをコンパイルしたシステムは perl v5.16.3 を使用しており、現在コンパイルして実行しようとしているシステムは perl v5.8.5 を使用しており、そこに問題があると思います。~~ の使用方法に関して、v5.10 で多くの変更が行われたことは知っています。~~ 演算子を実際に使用した最初のバージョンは v5.10 ですか?

以下は、構文エラーが発生しているコードです。

if (/$SEARCH/x ~~ @{$pids{$mPID}{$key}}){

これは私が得ているエラーです:

syntax error at /sysadm/shared/ftp_search.pl line 310, near "/$SEARCH/x ~"
syntax error at /sysadm/shared/ftp_search.pl line 310, near "})"

これは周囲のコードなので、何が起こっているのかをよりよく理解できます。

 foreach my $mPID (keys %pids){
    foreach my $key (keys %{$pids{$mPID}}){
        if (/$SEARCH/x ~~ @{$pids{$mPID}{$key}}){
        } else {
            delete $pids{$mPID}{$key};
        }
    }
}

基本的に、ハッシュのハッシュがあり、基本的にステートメントが一致しない場合は、ハッシュから削除されます。サーバー上の perl をアップグレードしようとしていますが、まだ承認を得ようとしています。これは、使用されている perl バージョンが原因であると想定して正しいですか?

ありがとうございました。

4

1 に答える 1

1

スマート マッチ演算子は 5.10.0 で追加されたもので、以前のバージョンの perl では機能しません。( perl 5.10.0 変更ログ)

ちなみに、オペレーターは 5.18.0 以降「実験的」に分類されており、それに依存することはお勧めしません。( 5.18.0 変更ログ)。

v5.10.0 で追加され、v5.10.1 で大幅に改訂されたスマート マッチは、常に不満の種でした。便利な方法はたくさんありますが、Perl のユーザーと実装者の両方にとって問題があり、混乱を招くことも証明されています。この問題にどのように対処するのが最善かについて、多くの提案がなされてきました。スマートマッチが将来変更されるか、なくなることはほぼ確実です。現在の動作に依存することはお勧めしません。

于 2014-06-25T17:57:21.993 に答える