@array ~~ $scalar is true when $scalar is in @array
draegtun回复:
从5.10.1+开始,~~的顺序是 重要。因此它需要是$ scalar ~~ @array
~~
上包含以下具体问题的~~
小引物怎么样:什么是~~
?什么是~~
?为什么订单在一个版本中很重要但在之前的版本中却不重要?
请注意,一个好的摘要可能无法获得所有细节,并且可能难以编写。引入或引用对于为不熟悉non-word-tilde-tilde
的人节省时间非常有用,同时扩大了这种Perlism的曝光度。
Search strings:non-word-at-sign
{{1}}。
答案 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)
通常,当您需要有关Perl中的运算符的信息时,请参阅 perldoc perlop