在这段Perl代码中,ENDOFTEXT是什么意思?

10

我想知道在这个Perl脚本中,ENDOFTEXT是什么意思:

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);
4个回答

10
这是一个运算符,称为heredoc或here-document。有趣的是,在perldoc中的参考资料并不像应该那样容易找到。它可以方便地引用大段文本而无需费心逃避特殊变量。
您也可以在维基百科上阅读Here document article。您要查找的条目是perldoc下Quote-and-Quote-like-Operators中的<<EOF。我在这里引用它是为了方便使用:

一种基于shell“here-document”语法的行定向引用形式。在<<后面指定一个字符串来终止引用材料,从当前行开始的所有行直到终止字符串都是该项的值。终止字符串可以是标识符(单词),也可以是某些带引号的文本。未引用的标识符的工作方式类似于双引号。<<和标识符之间不能有空格,除非标识符被显式引用。 (如果放置空格,则将其视为空标识符,这是有效的,并且与第一个空行匹配。)

终止字符串必须出现在终止行上,本身没有引号且周围没有空格。

如果终止字符串带引号,则所使用的引号类型决定文本的处理方式。


9
这是一个Here文档或 Here文档。ENDOFTEXT只是一些任意的标记,用于标记其结尾;它本身并没有任何含义。(我更倾向于使用END,但那只是个人喜好。)

7

除了其他人说的内容外,我应该指出这本书《Perl最佳实践》建议避免使用裸字here-docs(例如:“<<EOF”),而是明确引用每个here-doc,如<<'EOF'或<<"EOF"。这是因为人们经常不知道裸字EOF的情况。


3
ENDOFTEXT字符串表示“here-document”的开始和结束。它在官方的Perl文档中有描述(搜索EOF):Quote-and-Quote-like-Operators。它是一个任意的字符串;代码也可以使用字符串FOO,达到相同的效果。它允许多行引用,而且在这种情况下,变量将被插入进去。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接