为什么认为Perl 5的智能匹配运算符已损坏?[关闭]


17

我已经在网上看到许多评论,Perl的智能匹配运算符已损坏。我知道它最初是Perl 6的一部分,然后在规范的旧版本的Perl 5.10中实现,然后在5.10.1中进行了更正以匹配当前的Perl 6规范。

问题已在5.10.1+中解决,还是智能匹配运算符还有其他问题在实践中造成麻烦?

有什么问题?

是否有解决此问题的更新版本(也许是Perl 6)?

编辑:为澄清起见,我并不是在询问错误,而是想知道错误的预期行为~~是不好的。


这样会不会更好呢?

3
因此,似乎讨厌这些天用代码片段无法解决的问题。
肖恩·麦克米兰

2
我认为它不属于SO,它要求对为何Perl的智能匹配运算符被视为损坏的概念进行解释。
yannis 2011年

1
从您在链接中看到的信息来看,智能匹配似乎是(或曾经是)递归的,因此仅由于数组(可能是间接的)包含对自身的引用,它就有可能导致无限递归。
user281377 2011年

2
@SeanMcMillan-这些天让SO讨厌很多事情:/
Rook

Answers:


14

人们经常将smartmatch运算符引起的问题与given/when构造引起的问题相混淆,例如lexical问题$_

我认为,如果仅对文字使用smartmatch运算符,则不会发疯。我对其他任何情况都不能保证。试图弄清楚$a ~~ $b正在做什么,足以使任何体面的人疯狂地尖叫,并完全接受另一种编程语言。

至少,这就是我在Larry编辑《编程Perl第四版》的smartmatch部分时得到的。


4

智能匹配运算符不是“破”的,但是有很多错误。Perl v5.12修复了该问题,Perl v5.14完善了恕我直言。因此,为回答您的问题,Perl v5.12及更高版本解决了此问题。您可以在更高版本的Perl v5.10中进行尝试,但是我知道它在Perl 5.12+中更有效。

编辑:要回答您的编辑,请参阅此博客。阅读这篇文章后,我相信它足以回答您的问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.