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以降に明示的に文書化されているからです。数量子が必要なときに開く中括弧をエスケープすることは解決策ではありません。暗黙的にゼロを追加することです。