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을 추가하는 것입니다.