9

可能重复:
用 <<'ESQ' 帮助我理解这个 Perl 语句

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,每次都一样。


Selenium 本身不支持小程序,您必须找到外部工具来扩展 selenium 以供小程序使用。试试http://docs.codehaus.org/display/FEST/Selenium

4

2 回答 2

23

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

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

cat <<EOF
hello
goodbye
EOF

将运行cat,然后将两行发送到其标准输入(hello 和 goodbye 行)。Perl 也有这个特性,尽管语法略有不同(正如你所期望的,因为它是一种不同的语言)。尽管如此,它仍然足够接近解释仍然成立。

Wikipedia 有一个条目,如果您知道它被称为 here-doc,您可能会发现它,但否则很难弄清楚。

EOF在您的特定情况下,使用and之间没有区别PETE,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,希望一切都会变得清晰。

于 2012-08-14T08:20:06.427 回答
11

请参阅Quote 和 Quote-like Operators(解释得很好)。

于 2012-08-14T08:21:38.343 回答