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

이는 다음에 설명된 변경 사항으로 인해 발생합니다."펄 5.22의 변경 사항"그러나 "{"를 이스케이프하기 위해 제안된 솔루션은 다음과 같습니다.자주이는 정규식의 의도된 논리에 따라 올바른 접근 방식이 아닙니다.

이 경고는 정규 표현식이 "{,20}"와 같은 구조를 사용할 때 발생합니다. 역사적으로 어떤 경우에는다른정규식 구현은 "이전 원자의 반복 시리즈, 0~20회"인 "{0,20}"과 동일한 것으로 해석됩니다. 수량화된 복제가 의도된 모든 경우에, 이것은 모든 최신 버전의 Perl에서 깨졌습니다. 왜냐하면 "{" 뒤에 숫자 이외의 다른 문자가 오는 것을 리터럴 "{"로 해석하는 것이 5.8 이후 명시적으로 문서화되었기 때문입니다. 수량자가 필요할 때 여는 중괄호를 이스케이프하는 것은 해결책이 아닙니다. 암시적으로 0을 추가하는 것입니다.

관련 정보