2012-08-14 96 views
7

可能重複:
Help me understand this Perl statement with <<'ESQ'什麼是print << EOF;它是如何工作的?

什麼是https://stackoverflow.com/questions/4151279/perl-print-eof聲明做什麼呢?我遇到了上一篇文章,但不明白他想要解釋什麼。那是什麼PETE?任何人都可以解釋每一行?代碼如何工作?

print <<EOF; 
This is 
a multiline 
string 
EOF 

print <<PETE; 
This is 
a multiline 
string 
PETE 

這兩者有什麼區別和相似之處?代替PETE我已經使用了許多其他的詞,如DOG,它的作品每次都是一樣的。

回答

20

這被稱爲here-doc。它基本上抓住了從下一行開始直到結束標記行的所有內容,並將其作爲正在運行的程序的標準輸入。結束標記線由<<之後的文本控制。

作爲一個例子,在bash(其中我更熟悉比Perl),命令:

cat <<EOF 
hello 
goodbye 
EOF 

將運行cat然後發送兩行它的標準輸入(問候和再見線)。 Perl也有這個特性,儘管語法略有不同(正如你所期待的那樣,因爲它是一種不同的語言)。儘管如此,它仍然足以讓解釋依然成立。

維基百科有an entry for this,你可能會發現你知道它被稱爲here-doc,但否則這將是很難弄清楚。

在您的具體情況下,使用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,它將有希望變得清晰。