编辑:注意新的Perl程序员:此机制不应用于多行注释!它有一个缺陷,降低了可读性。
在这PerlMonks post on mechanisms to produce multiline comments in Perl中,阿比盖尔提供了这个,让我感到困惑:
仅使用here文档的问题是它会在'-w'下发出警告。使用鲜为人知的<<<<<< >>操作
<<q=~q>>;
This is a multiline comment.
q
通过-M0=Deparse
运行它会产生:
" This is a multiline comment.\n" =~ //;
-e syntax OK
有人可以告诉我发生了什么事吗?
答案 0 :(得分:15)
阿比盖尔的回答部分是幽默的。实际上没有<< >>
运算符(不是在Perl before 5.22的版本中),但有一个(不是那个众所周知的,我猜)<<
运算符。不是二元移位运算符,而是一元here-document (heredoc for short)。一个简单的形式是:
$long_string = <<EOF;
This is a long, multiline string.
It ends when EOF appears alone on a line.
It will be assigned to the \$long_string variable.
EOF
事实上,这是阿比盖尔答案背后的“多线评论”特征 - 多线字符串文字。剩下的就是有点模糊的Perl。
<<
之后的单词或带引号的字符串结束字符串文字。您可以将q
用作赤字:
<<q;
This is a multiline comment, or rather a string literal whose value is ignored.
q
要理解Abigail的其余片段,将here-document重写为简单的字符串文字会有所帮助:
"This is a multiline comment.\n" =~ q>>;
好的,现在q>>
是q
quote-like operator,其中>
是分隔符。 q>>
相当于''
(非插值文字,恰好是空的)。所以字符串文字是matched against an empty pattern。无论如何,此匹配的结果都会被忽略,但这会破坏匹配结果变量($1
,$&
等)。
答案 1 :(得分:11)
哈。没有“&lt;&lt;&gt;&gt;”这样的东西运营商。那里发生的事情基本上与此相同:
"" =~ ''
=~
当然是您通常与m//
或s///
一起使用的普通模式绑定运算符。 ''
对文字字符串使用q {}语法,>
作为分隔符,并在运行时被解释为模式。 ""
是here-doc,q
作为终止字符串。
我当然不会称之为评论。考虑一下这个程序片段的输出:
"copacetic" =~ q/(c[a-z]+)/;
print "$1\n";
<<q=~q>>;
This is crap, not a comment!
q
print "$1\n";
答案 2 :(得分:5)
以下内容不是很好,但它不会导致可执行代码。
0 && <<COMMENT
...
COMMENT