Perl 运算符是“发现的”而不是设计的?

Posted

技术标签:

【中文标题】Perl 运算符是“发现的”而不是设计的?【英文标题】:Perl operators are "discovered" and not designed? 【发布时间】:2013-07-09 22:54:12 【问题描述】:

刚刚阅读此页面:https://github.com/book/perlsecret/blob/master/lib/perlsecret.pod,并且对以下语句感到非常惊讶:

Discovered by Philippe Bruhat, 2012.
Discovered by Abigail, 2010. (Alternate nickname: "grappling hook")
Discovered by Rafaël Garcia-Suarez, 2009.
Discovered by Philippe Bruhat, 2007.

等等……

上述运算符是发现,所以它们不是 perl 设计故意的?

这意味着 perl 可能有一些随机的字符序列按照正确的顺序做一些有用的事情比如()x!!“操作员”?

这里是否还有其他语言发现操作符?

【问题讨论】:

C、C++、Perl 等有goes to operator 【参考方案1】:

从您链接的页面:

在这些 Perl 程序员看到的意义上,它们就像运算符 他们经常足以在不考虑他们的情况下认出他们 较小的部分,并最终将它们添加到他们的工具箱中。他们是 就像秘密一样,它们必须被自己的人发现 未来的用户(或被其他程序员传送),因为他们 没有明确记录。

也就是说,它们实际上并不是自己的运算符,而是由较小的运算符组成,它们组合在一起做某事。

例如,'venus' 运算符(0++0)将对象的左侧或右侧数字化。这就是以任何形式添加零的作用,无论是否“秘密”运算符。

【讨论】:

"秘密运算符实际上并不是秘密,它们也不是真正的运算符。perl 解析器不会专门识别它们,也没有人试图对你隐藏它们。"【参考方案2】:

Perl 有许多执行特殊操作的运算符,以及在特定上下文中解释时执行特殊操作的字符。与其将它们视为实际的“操作符”(即 Perl 解析器未明确识别),不如将它们视为某些功能/操作的组合。例如()X!!,被称为“企业”运算符,由列表()、重复运算符x!!(“砰砰”运算符),它执行布尔转换。这是 Perl 如此富有表现力的原因之一。

【讨论】:

以上是关于Perl 运算符是“发现的”而不是设计的?的主要内容,如果未能解决你的问题,请参考以下文章

Perl 5 的 pick-your-own-quotes 运算符的合法分隔符是啥?

perl 6集合操作中用户定义的比较函数

Perl语言入门--2--perl的运算符

在 Perl 中使用 -s 获取文件大小

Perl 5 中存在哪些伪运算符?

Perl中的运算符介绍