Perl에서 << 'm'= ~ m >> 구문은 무엇을 의미합니까?
그래서 저는 펄이 비정상적인 구문을 가지고 있다는 것을 이해합니다.하지만 다른 날에 제가 혼란 스러웠던 코드 조각을 직장에서 발견했습니다. 누군가 그것이 의미하는 바를 설명해 주시겠습니까?
<<'m'=~m>>
print $a unless $b;
return;
m
;
HEREDOC 구문처럼 보이지만 내가 본 어떤 형태도 아닙니다.
이 비밀 구문은 화려한 양날 검 으로 알려져 있으며 일반적으로 다음과 같이 표시됩니다.
<<m=~m>>
Comments here
m
;
heredoc 구문과 일치 연산자 ( =~
)를 >
구분 기호로 사용하는 여러 줄 주석에 대한 해킹입니다 .
슬래시 ( /
)는 일치 구분자로 사용되지 않으므로 'm'연산자가 필요합니다. 예를 들어 $my_var =~ /test/
는와 동일 $my_var =~ m>test>
하지만 $my_var =~ >test>
유효하지 않습니다.
m
스 니펫 의 첫 번째 문자가 작은 따옴표로 묶여 있다는 사실에주의 하십시오. 즉, $a
및 $b
변수는 보간되지 않습니다. 이 따옴표가 생략되면 (제공된 코드 예제에 따라) perl은 자동으로 끝 마커에 큰 따옴표를 추가하고 후속 변수는 보간됩니다. 경우 문제가 발생할 것 $a
하고는 $b
더 이상 정의되지 않으며 사용중인 use warnings;
.
위의 화려한 이중 블레이드 예제를 이해하기 쉽게 만들기 위해 (권장하지 않음) 다음과 같이 작성할 수 있습니다.
<<"END" =~ //
Comments here
END
;
참고이는 것을 =~ //
이에 해당하므로, 중복 :
<<"END";
Comments here
END
이것은 void 컨텍스트에서 표준 heredoc 구문입니다.
빈 컨텍스트에 문자열이 있으면 문제가 발생할 수 있으므로 프로덕션 코드에서 이것을 사용하지 않는 것이 좋습니다. 게다가이 코드는 가장 경험이 많은 펄 프로그래머에게도 머리를 긁는 도구이며 읽고 유지하기가 무의미합니다! 적절한 여러 줄 주석을 작성하려면 여기에 설명 된대로 pod를 고수하는 것이 좋습니다 . Perl에서 여러 줄 주석을 어떻게 입력합니까?
이것이 해결되기를 바랍니다.
B :: Deparse를 실행 하면 perl이 해당 코드를 어떻게 처리하는지 이해하는 데 많은 도움이됩니다 ( "test.pl"파일에 있다고 가정).
perl -MO=Deparse test.pl
우리에게 보여줘:
"print \$a unless \$b;\nreturn;\n" =~ //;
test.pl syntax OK
따라서 보시다시피 perl은 빈 regexpr을 다음 문자열과 일치 시키려고합니다. "print \$a unless \$b;\nreturn;\n"
참고 URL : https://stackoverflow.com/questions/32665616/what-does-the-mm-syntax-mean-in-perl
'programing tip' 카테고리의 다른 글
Postgresql 집계 배열 (0) | 2020.09.25 |
---|---|
사람들이 CloudInit를 사용하는 대신 Amazon Cloud Formation에서 Puppet / Chef를 사용하는 이유는 무엇입니까? (0) | 2020.09.25 |
Android Studio- 이미 존재하는 프로그램 유형 : com.google.android.gms.internal.measurement.zzwp (0) | 2020.09.25 |
"스택 오버플로"는 어떻게 발생하며 어떻게 방지합니까? (0) | 2020.09.25 |
Swift에서 HTTP 요청 + 기본 인증을 만드는 방법 (0) | 2020.09.24 |