什么是打印<

时间:2012-08-14 08:16:33

标签: perl

  

可能重复:
  Help me understand this Perl statement with <<'ESQ'

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,每次都有相同的效果。

2 个答案:

答案 0 :(得分:20)

这称为here-doc。它基本上抓住了从下一行到结束标记行的所有内容,并将其作为您正在运行的程序的标准输入。结束标记行由<<后面的文本控制。

例如,在bash(我比Perl更熟悉)中,命令:

cat <<EOF
hello
goodbye
EOF

将运行cat,然后将两行发送到其标准输入(hello和goodbye行)。 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,则希望一切都变得清晰。

答案 1 :(得分:10)

请参阅Quote and Quote-like Operators(很好地解释了这一点)。