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}”,即“前面的原子的重复系列,零到二十次”。在所有意图量化重复的情况下,这在 Perl 的所有现代版本中都被打破了,因为自 5.8 以来,将“{”后跟数字以外的任何内容解释为文字“{”已被明确记录。在预期量词的情况下转义左大括号并不是解决办法;添加隐含的零是。

相关内容