automakeエラー:正規表現でエスケープされていないオープン中括弧は廃止されました。

automakeエラー:正規表現でエスケープされていないオープン中括弧は廃止されました。

GNU automake 1.15をコンパイルしてインストールした後、automakeを実行するたびに次のエラーが発生します。

Unescaped left brace in regex is deprecated, passed through in regex;
marked by <-- HERE in m/\${ <-- HERE ([^ \t=:+{}]+)}/
at /usr/local/bin/automake line 3936

私はPerl v5.22.0を実行しています。

答え1

Perl v5.22では、正規表現にリテラルを使用することは廃止され、{エスケープされないと警告が表示されます\{。 v5.26では、警告が発生するだけでなく、構文エラーも発生します。

ソフトウェア作成者は、バージョン5.26がリリースされる前にこの問題を解決する必要があります。今はこの警告を無視しても構いません。

バラよりフェルデルタもっと学ぶ。

答え2

この問題は2016-04-01(automake 1.15以降、1.15.1より前)で修正されました。

~から変更ログ:

  966 2016-04-01  Paul Eggert  <[email protected]>
  967 
  968   automake: port to Perl 5.22 and later
  969 
  970   Without this change, Perl 5.22 complains "Unescaped left brace in
  971   regex is deprecated" and this is planned to become a hard error in
  972   Perl 5.26.  See:
  973   http://search.cpan.org/dist/perl-5.22.0/pod/perldelta.pod#A_literal_%22{%22_should_now_be_escaped_in_a_pattern
  974   * bin/automake.in (substitute_ac_subst_variables): Escape left brace.

答え3

これは、次に説明する変更によって発生します。「Perl 5.22の変更点」ただし、「{」をエスケープするために提案された解決策は次のとおりです。よくこれは正規表現の意図されたロジックによる正しいアプローチではありません。

この警告は、正規表現が「{,20}」などの構造体を使用する場合に発生します。歴史的にいくつかのケースではその他正規表現の実装は、「前の原子の繰り返しシリーズ、0~20回」である「{0,20}」と同じと解釈されます。数量化された複製が意図されているすべての場合、これはすべての最新バージョンのPerlで壊れています。なぜなら、「{」の後に数字以外の文字が続くことをリテラル「{」と解釈することは、5.8以降に明示的に文書化されているからです。数量子が必要なときに開く中括弧をエスケープすることは解決策ではありません。暗黙的にゼロを追加することです。

関連情報