Perl中的“~~”是什么意思?

时间:2010-06-22 16:08:34

标签: perl terminology smartmatch

SO answer daxim州:

@array ~~ $scalar is true when $scalar is in @array

draegtun回复:

  

从5.10.1+开始,~~的顺序是   重要。因此它需要是$ scalar   ~~ @array

~~上包含以下具体问题的~~小引物怎么样:什么是~~?什么是~~?为什么订单在一个版本中很重要但在之前的版本中却不重要?

请注意,一个好的摘要可能无法获得所有细节,并且可能难以编写。引入或引用对于为不熟悉non-word-tilde-tilde的人节省时间非常有用,同时扩大了这种Perlism的曝光度。

Search stringsnon-word-at-sign {{1}}。

4 个答案:

答案 0 :(得分:26)

具体回答“为什么订单在一个版本中而不是在前一个版本中重要”:智能匹配运算符在5.10.0中设计得很糟糕,使得难以可靠地使用,并且使得给定/何时构造不太有用,因此语义随5.10.1而改变,所有未来版本都会假装5.10.0版本从未存在过。

在智能匹配的5.10.1+版本中,始终对~~的左操作数和右操作数进行明确处理。就像=~正则表达式匹配运算符一样,左侧是匹配的“主题”,右侧是匹配的“模式” - 无论是普通标量,正则表达式,还是数组或散列引用,代码引用或其他。具体细节在perlsyn中很详细。

你根本不用担心5.10.0版本,除非你已经编写了依赖于5.10.0语义的代码(在这种情况下,你应该将它重写为需要5.10.1,否则它会打破所有未来的perl版本。)

答案 1 :(得分:18)

智能匹配,请参阅perldoc perlsyn

根据评论中的请求,我会再给出一些: Smart Match是任意数据类型的运算符,它试图理解相等测试只知道参数的类型,很多测试需要复杂的操作,如迭代和正则表达式应用程序

答案 2 :(得分:5)

(从Learn Perl中窃取):二进制“~~”在其参数之间进行了智能匹配。

http://perldoc.perl.org/perlsyn.html#Smart-matching-in-detail

它做什么? “这取决于”主要取决于所提供参数的类型。上面链接的页面有关于变体的详细信息。

答案 3 :(得分:5)

是的 smartmatch operator

通常,当您需要有关Perl中的运算符的信息时,请参阅 perldoc perlop