22

SO 回答 中,daxim指出:

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

draegtun回复

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

来一份关于来源链接的小型入门书怎么样,~~包括以下具体问题:什么是~~?什么~~叫做?为什么顺序在一个版本中很重要,但在以前的版本中不重要?

请注意,一个好的摘要可能无法包含所有细节,并且可能难以编写。介绍或入门非常有用,可以为不熟悉的人节省时间,~~同时扩大这种 Perlism 的曝光率。

搜索字符串non-word-tilde-tilde non-word-at-sign

4

4 回答 4

27

专门回答“为什么顺序在一个版本中很重要,但在以前的版本中不重要”:智能匹配运算符在 5.10.0 中设计不当,使其难以可靠使用,并且使得 given/when 构造不太有用比它可能的,所以语义在 5.10.1 中发生了变化,所有未来的版本都将假装 5.10.0 版本从未存在过。

在 5.10.1+ 版本的智能匹配中,左操作数和右操作数 to~~总是被区别对待。就像=~正则表达式匹配运算符一样,左侧是匹配的“主题”,右侧是要匹配的“模式”——无论是纯标量、正则表达式、数组还是哈希引用,代码参考,或其他。perlsyn 中的细节非常详细。

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

于 2010-06-22T16:24:22.523 回答
19

智能匹配,请参阅perldoc perlsyn

根据评论中的要求,我将提供更多信息:Smart Match 是用于任意数据类型的运算符,它试图理解等式测试,只知道参数的类型,许多测试需要复杂的操作,例如迭代和正则表达式应用

于 2010-06-22T16:09:24.790 回答
5

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

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

它有什么作用?“这取决于”主要取决于所提供参数的类型。上面链接的页面详细说明了变化是什么。

于 2010-06-22T16:11:03.133 回答
5

它是 smartmatch 运算符

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

于 2010-06-22T16:11:28.717 回答