所以我明白perl有很多不同寻常的语法,但我遇到了一个代码片段在工作,其他那天,让我困惑。有人可以向我解释它的意思:
<<'m'=~m>> print $a unless $b; return; m ;
它看起来像HEREDOC语法,但没有任何形式,我见过。
解决方法
此秘密语法称为
ornate double-bladed sword,通常表示为:
<<m=~m>> Comments here m ;
这是一个多行注释的hack,利用heredoc语法和匹配运算符(=〜)与>作为分隔符。
注意,如斜线,/,未用作匹配的分隔符,则需要“m”运算符。例如$ my_var =〜/ test /等效于$ my_var =〜m> test>,而$ my_var =〜> test>将无效。
注意事实,你的代码片段中的第一个m字符由单引号括起来,意味着$ a和$ b变量不会被插值。如果这些引用被省略(根据我提供的代码示例)perl将自动添加双引号到结束标记,任何后续的变量将被插值。这将导致问题,如果$ a和$ b不再定义,你使用使用警告。
为了使上面的华丽双刀片示例更容易理解(但仍然不推荐),我们可以写:
<<"END" =~ // Comments here END ;
注意= = //是多余的,所以这相当于:
<<"END"; Comments here END
这只是在void上下文中的标准heredoc语法。
我不建议在生产代码中使用这个,因为在void上下文中有一个字符串可能会导致问题。此外,这个代码是一个头部scratcher甚至最有经验的perl程序员,是无意义的阅读和维护难度!如果你想创建正确的多行注释,那么我建议坚持pod,如这里解释How do I enter a multi-line comment in Perl?
希望这清除它。