Joe*_*ger 13 perl comments operators
编辑:注意新的Perl程序员:这个机制不应该用于多行注释!它有一个缺陷降低可读性.
在PerlMonks关于在Perl中生成多行注释的机制的帖子中,Abigail提供了这个,让我困惑:
使用here文档的问题是它会在'-w'下发出警告.使用鲜为人知的<< >>运算符要好得多.
<<q=~q>>;
This is a multiline comment.
q
Run Code Online (Sandbox Code Playgroud)
运行它-M0=Deparse
给出:
" This is a multiline comment.\n" =~ //;
-e syntax OK
Run Code Online (Sandbox Code Playgroud)
有人能告诉我发生了什么事吗?
Gil*_*il' 15
阿比盖尔的回答部分是幽默的.实际上没有<< >>
运算符(在5.22之前没有Perl的版本),但是有一个(不是那个众所周知的,我猜)<<
运算符.不是二元移位运算符,而是一元文档(简称heredoc).一个简单的形式是:
$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
Run Code Online (Sandbox Code Playgroud)
事实上,这是阿比盖尔答案背后的"多线评论"特征 - 多线字符串文字.其余的有点混淆了Perl.
<<
字符串文字结束后的裸字或带引号的字符串.你可以q
用作一个赤字:
<<q;
This is a multiline comment, or rather a string literal whose value is ignored.
q
Run Code Online (Sandbox Code Playgroud)
要理解Abigail的其余片段,将here-document重写为一个简单的字符串文字是有帮助的:
"This is a multiline comment.\n" =~ q>>;
Run Code Online (Sandbox Code Playgroud)
好的,现在q>>
是q
类似引号的运算符,带有>
分隔符.q>>
相当于''
(非插值的文字,恰好是空的).所以字符串文字与空模式匹配.该匹配的结果无论如何忽略,但这则会覆盖匹配结果变量($1
,$&
,等).
Ano*_*mie 11
哈.没有"<< >>"运算符这样的东西.那里发生的事情基本上等同于:
"" =~ ''
Run Code Online (Sandbox Code Playgroud)
=~
当然,这是你通常使用的普通模式绑定操作符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";
Run Code Online (Sandbox Code Playgroud)
以下不是很漂亮,但它没有可执行代码.
0 && <<COMMENT
...
COMMENT
Run Code Online (Sandbox Code Playgroud)