substr($obj_strptime,index($strptime,"sub")+6,0) = <<'ESQ';
shift; # package
....
....
ESQ
这是什么ESQ,它在这做什么?请帮助我理解这些陈述。
答案 0 :(得分:10)
它标志着here-doc section。
的结束虽然EOF比ESQ更传统。
答案 1 :(得分:1)
此构造称为here-doc(因为您从文档此处获取标准输入而不是文件系统上的外部文档)。
它基本上读取从下一行到但不包括结束标记行的所有内容,并将其用作您正在运行的程序或命令的标准输入。结束标记行由<<
后面的文本控制。
例如,在bash
(我比Perl更熟悉)中,命令:
cat <<EOF
hello
goodbye
EOF
将运行cat
,然后将两行发送到其标准输入(hello和goodbye行)。 Perl也有这个功能,虽然语法略有不同(正如你所料,因为它是一种不同的语言)。尽管如此,它仍足以让解释仍然存在。
维基百科有an entry for this如果您知道它被称为here-doc,您可能会发现它,但是否则很难弄明白。
您基本上可以使用任何合适的标记。例如,如果您的某个输入行是EOF
,则您无法将其用作标记,因为标准输入会提前终止:
cat <<EOF
This section contains the line ...
EOF
but then has more stuff
and this line following is the real ...
EOF
在这种情况下,您可以使用DONE
(或其他任何未在文本中显示的内容)。
还有其他选项,例如在标记周围使用引号(因此缩进看起来更好)以及使用单引号或双引号来控制变量替换。
如果您转到perlop
页面并搜索<<EOF
,则希望一切都变得清晰。