可能重复:
帮助我理解带有<<'ESQ'的Perl语句
/sf/ask/290589561/中的声明究竟是什么?我遇到了上一篇文章,但不明白他想解释什么.那是什么PETE
?谁能解释每一行?代码是如何工作的?
print <<EOF;
This is
a multiline
string
EOF
print <<PETE;
This is
a multiline
string
PETE
Run Code Online (Sandbox Code Playgroud)
这两者之间有什么区别和相似之处?取而代之的是,PETE
我已经使用了许多其他单词,DOG
并且每次都使用相同的单词.
pax*_*blo 21
这称为here-doc.它基本上抓住了从下一行到结束标记行的所有内容,并将其作为您正在运行的程序的标准输入.结束标记线由后面的文本控制<<
.
作为一个例子,在bash
(我比Perl更熟悉)中,命令:
cat <<EOF
hello
goodbye
EOF
Run Code Online (Sandbox Code Playgroud)
将运行cat
然后将两行发送到其标准输入(hello和goodbye行).Perl也有这个功能,虽然语法略有不同(正如你所料,因为它是一种不同的语言).尽管如此,它还是足够接近,仍然可以解释.
维基百科有一个条目你可能会发现,如果你知道它被称为here-doc,但是否则很难弄明白.
在您的特定情况下,使用EOF
和之间没有区别PETE
,heredoc标记(位跟随<<
)和标准输入结束之间存在关系.
例如,如果您的某个输入行是EOF
,那么您不能真正将其用作标记,因为标准输入会提前终止:
cat <<EOF
This section contains the line ...
EOF
but then has more stuff
and this line following is the real ...
EOF
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您可以使用PETE
(或其他任何未在文本中出现的内容).
还有其他选项,例如在标记周围使用引号(因此缩进看起来更好)以及使用单引号或双引号来控制变量替换.
如果你去perlop
页面搜索<<EOF
,希望一切都变得清晰.