2010-07-11 2 views
10

Я хотел бы знать, что ENDOFTEXT означает в данном сценарии Perl:Что означает ENDOFTEXT в этом коде Perl?

print <<ENDOFTEXT; 
HTTP/1.0 200 OK 
Content-Type: text/html 

<HTML> 
<HEAD><TITLE>Hello World!</TITLE></HEAD> 
<BODY> 
<H4>Hello World!</H4> 
<P>You have reached <a href="$url">$url</a></P> 
<P>Your IP Address is $ip</P> 
<H5>Have a nice day!</H5> 
</BODY> 
</HTML> 
ENDOFTEXT 
exit(0); 

ответ

10

Это оператор, называемый heredoc или here-document. Довольно забавно, что ссылка в perldoc не так просто найти, как должно быть. Это полезно для того, чтобы процитировать большой раздел текста, не беспокоясь о том, чтобы избежать специальных переменных.

Вы также можете прочитать Here document article о википедии. Запись, которую вы ищете, - <<EOF под Quote-and-Quote-like-Operators от perldoc. Я со ссылкой на его здесь для простоты использования:

Линия-ориентированная форма цитирования является на основе оболочки «здесь-документ» синтаксиса. После < < вы указываете строку для прекращения цитируемого материала , и все строки, следующие за текущей строкой , заканчиваются на строку . Конечная строка может быть либо идентификатором (слово), либо некоторым цитированным текстом. Некотируемый идентификатор работает как двойные кавычки. Не может быть пробелов между < < и идентификатором , если только идентификатор не указан . (Если поставить пробел он будет рассматриваться как идентификатор нулевого , который является действительным, и соответствует первой пустой строке.)

терминатор строки должна появиться сама (без кавычек и не окружающих пробел) на завершающей линии .

Если строка завершающего цитируется, тип котировок используется для определения текста .

9

Это здесь-документ или heredoc. ENDOFTEXT - это просто произвольная последовательность, которая знаменует ее конец; это ничего не значит само по себе. (Я был бы более склонен использовать END, но это просто личный вкус.)

3

Строка ENDOFTEXT обозначает начало и конец «настоящего документа». Он описан в официальной документации Perl (поиск по EOF): Quote-and-Quote-like-Operators. Это произвольная строка; код мог бы использовать строку FOO с тем же эффектом. Он допускает многострочное цитирование, и в этом случае переменные будут интерполированы.

7

В дополнение к тому, что сказал, что другие люди, я должен отметить, что книга Perl Best Practices рекомендует избегать использования bareword здесь-документы (например: «< < EOF») и вместо того, чтобы явно цитировать все здесь-документ или как < < «EOF 'или < < "EOF". Это связано с тем, что люди часто не знают, что происходит в случае EOF с открытым словом.

Смежные вопросы