web-dev-qa-db-ja.com

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を実行しています。

4
ISlimani

Perl v5.22では、リテラル{正規表現での使用は推奨されておらず、エスケープされていない場合は警告が表示されます:\{。 v5.26では、これは単に警告するだけではなく、構文エラーを引き起こします。

ソフトウェアの作者は、5.26リリースの前にこれを修正する必要があります。現時点では、この警告は無視しても問題ありません。

詳細は perldelta を参照してください。

3
stevieb

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

ChangeLog から:

  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.
1
Kusalananda

これは、[perldelta] [ http://search.cpan.org/dist/Perl-5.22.0/pod/perldelta.pod#A_literal_%22%7B%22_should_now_be_escaped_in_a_pattern で説明されている変更が原因です。 「5.22のPerlの変更」]しかし、 '{'をエスケープすることを提案する解決策は頻繁に正規表現の意図したロジックによっては、正しいことではありません。

この警告は、正規表現が「{、20}」のような構成要素を使用している場合に発生します。これは、歴史的に一部[〜#〜] other [〜#〜]正規表現の実装は「{0,20}」と同等、つまり「直前のアトムの一連の繰り返し、0〜20回」と解釈されました。反復を定量化することを目的とするすべてのケースで、これは、Perlのすべての最新バージョンで壊れています。5.8以降、リテラル '{'として数値以外のものが続く '{'の解釈が明示的に文書化されているためです。目的の量指定子の場合に左中括弧をエスケープすることは修正ではありません。暗黙のゼロを追加します。

1
Bill Cole

問題はautomake 1.15.1の修正のようです

0
arved