erro do automake: a chave esquerda sem escape no regex está obsoleta

4

Depois de compilar e instalar o GNU automake 1.15, recebo este erro sempre que executo o 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

Estou executando o perl v5.22.0.

    
por ISlimani 25.10.2015 / 19:35

5 respostas

3

No perl v5.22, usar um literal { em uma expressão regular foi descontinuado e emitirá um aviso se não tiver escapado: \{ . Na v5.26, isso não apenas avisará, causará um erro de sintaxe.

O autor do software precisará corrigir isso antes da versão 5.26. Por enquanto, você pode ignorar com segurança este aviso.

Veja perldelta para detalhes.

    
por 26.10.2015 / 15:50
1

Isso se deve à alteração descrita em [perldelta] [ link " Perl Changes for 5.22 "] mas a solução sugerida de escapar do '{' é freqüentemente não é a coisa certa a se fazer, dependendo na lógica pretendida da regex.

Esse aviso ocorre quando um regex usa uma construção como "{, 20}" que, historicamente, em algumas implementações de regex OTHER foi interpretada como equivalente a "{0, 20} ", ie" uma série repetida do átomo anterior, de zero a vinte vezes. " Em todos os casos em que a intenção é quantificar uma repetição, ela é quebrada em todas as versões modernas do Perl, porque a interpretação de '{' seguida por qualquer coisa que não seja um número como um literal '{' foi explicitamente documentada desde 5.8. Escapar da chave esquerda no caso de um quantificador pretendido não é a correção; adicionando o zero implícito é.

    
por 05.07.2017 / 17:57
1

Esta foi corrigida em 2016-04-01 (após o automake 1.15, antes de 1.15.1).

No 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.
    
por 09.04.2018 / 12:42
0

Eu recebi este erro só porque eu estava usando por engano 'print' em vez de echo no bash:

print "abcd123" | perl -e 'myscript'  #causes error

A solução foi usar echo, confundi print / echo misturando idiomas

echo "abcd123" | perl -e 'myscript'  #is fine
printf "abcd123" | perl -e 'myscript'  #is fine too, "printf" not print
    
por 23.01.2017 / 14:29
0

O problema parece ser corrigido com o automake 1.15.1

    
por 13.12.2017 / 21:12