加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

<<'m'=?m >>语法在pe

发布时间:2020-12-15 21:29:17 所属栏目:大数据 来源:网络整理
导读:所以我明白perl有很多不同寻常的语法,但我遇到了一个代码片段在工作,其他那天,让我困惑。有人可以向我解释它的意思: 'm'=~mprint $a unless $b;return;m; 它看起来像HEREDOC语法,但没有任何形式,我见过。 解决方法 此秘密语法称为 ornate double-blade
所以我明白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?

希望这清除它。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读