Perl中的"~~"是什么意思?

CW *_* II 21 perl terminology smartmatch

SO回答中, daxim指出:

@array ~~ $scalar is true when $scalar is in @array
Run Code Online (Sandbox Code Playgroud)

draegtun回复:

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

关于~~源(s)的链接的小型入门如何包括以下具体问题:什么是~~?什么~~叫?为什么订单在一个版本中很重要但在之前的版本中却不重要?

请注意,一个好的摘要可能无法获得所有细节,可能很难写.引入或引用对于为不熟悉的人节省时间非常有用,~~同时扩展此Perlism的曝光度.

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

hob*_*bbs 27

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

在智能匹配的5.10.1+版本中,左操作数和右操作数~~始终被清楚地处理.就像=~正则表达式匹配运算符一样,左侧是匹配的"主题",右侧是要匹配的"模式" - 无论是普通标量,正则表达式,数组还是哈希引用,代码引用,或者其他什么.在perlsyn中详细说明了具体细节.

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

  • +1用于回答RTFM未涵盖的问题的唯一部分. (3认同)
  • 这里参考的是perldoc在5.10.1宣布智能匹配的变化:http://search.cpan.org/~dapm/perl-5.10.1/pod/perl5101delta.pod#Smart_match_changes (3认同)
  • @CWHoleman II:你会问`=〜`是什么?怎么样`&&`?你也可以做同样的"难以搜索"的说法.除非您询问像`=()=`这样的伪运算符或者像`$ x - > 5'这样的混淆,否则答案仍然是相同的:请参阅perlop和perlsyn. (2认同)

Eva*_*oll 19

智能匹配,请参阅 perldoc perlsyn

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

  • 反过来又......在这个链接背后彻底详细. (5认同)
  • 我只是想,除非你有一个问题超出文档 - 这很好,它们应该是第一个参考点.我很乐意回答"什么是$ foo"以上,除了该链接的内容之外,我只是失去了从哪里开始的话. (3认同)
  • 我想用简单的话来解释很难.: - / (2认同)

Jas*_*rue 5

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

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

它有什么作用?"这取决于"主要取决于所提供参数的类型.上面链接的页面有关于变体的详细信息.


Joe*_*Joe 5

它是 smartmatch运营商.

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