2012-08-14 6 views
7

가능한 중복 : https://stackoverflow.com/questions/4151279/perl-print-eof의 문이 정확히 무엇을
Help me understand this Perl statement with <<'ESQ'인쇄 란 무엇입니까? << EOF; 어떻게 작동합니까?

을하고있다? 이전 글을 보았지만 그가 설명하려고하는 것을 이해하지 못했습니다. 그게 PETE 이니? 누구든지 모든 라인을 설명 할 수 있습니까? 코드가 어떻게 작동하고 있습니까?

print <<EOF; 
This is 
a multiline 
string 
EOF 

print <<PETE; 
This is 
a multiline 
string 
PETE 

이 둘의 차이점과 유사점은 무엇입니까? PETE 대신 나는 DOG과 같은 다른 많은 단어를 사용했으며 매번 똑같은 방식으로 작동합니다.

답변

20

이것을 here-doc라고합니다. 기본적으로 다음 줄부터 끝 마커 줄까지 모든 것을 가져 와서 실행중인 프로그램의 표준 입력으로 제공합니다. 끝 마커 선은 << 다음의 텍스트로 제어됩니다. bash에서 예를 들어

, (나는 펄보다 더 잘 알고있는) 명령 :

cat <<EOF 
hello 
goodbye 
EOF 

cat를 실행 한 다음 표준 입력 (헬로과 작별 인사 라인에 두 줄을 보내드립니다). Perl은 구문이 약간 다르지만 (이 기능이 다른 언어이기 때문에 예상했던대로)이 기능을 제공합니다. 그래도 여전히 설명이 충분히 가깝습니다.

위키 피 디아는 여기에 의사라고 불렀다는 것을 알았다면 아마도 발견했을 것입니다. 그렇지 않으면 알아 내기가 어려울 것입니다.

특정 경우에 EOFPETE을 사용하는 데 차이가 없으며 heredoc 마커 (<< 다음의 비트)와 표준 입력의 끝 사이에 관계가 있습니다. 당신의 입력 라인 중 하나가 EOF 인 경우 예를 들어

이, 당신이 정말로 마커로 표준 입력이 조기에 종료 될 수 있기 때문에 것을 사용할 수있다 :이 경우

cat <<EOF 
This section contains the line ... 
EOF 
but then has more stuff 
and this line following is the real ... 
EOF 

, 당신은 PETE을 사용할 수 있습니다 (또는 그 자체의 줄에 텍스트에 나타나지 않는 다른 것).

마커 주변의 따옴표 사용 (들여 쓰기가 개선 될 수 있음) 및 작은 따옴표 나 큰 따옴표를 사용하여 변수 대체를 제어하는 ​​등의 다른 옵션이 있습니다.

perlop 페이지로 이동하여 <<EOF을 검색하면 희망 사항이 모두 표시됩니다.

관련 문제