代码之家  ›  专栏  ›  技术社区  ›  CW Holeman II

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

  •  19
  • CW Holeman II  · 技术社区  · 14 年前

    在一个 SO answer daxim 国家:

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

    向哪个 draegtun 答复:

    从5.10.1+开始,~~的顺序是 重要的。因此它必须是$scalar ~~@阵列

    涂一点底漆怎么样 ~~ 带有到源的链接,包括以下特定问题:什么是 ~~ ?是什么 ~~ 打电话?为什么订单在一个版本中重要,而在以前的版本中不重要?

    请注意,一个好的摘要可能不会得到所有的细节,而且很难写。介绍或入门对于不熟悉的人来说是非常有用的。 ~~ 同时扩大了这种Perlism的曝光。

    Search strings : non-word-tilde-tilde non-word-at-sign .

    4 回复  |  直到 6 年前
        1
  •  25
  •   hobbs    14 年前

    具体回答“为什么订单在一个版本中重要,但在前一个版本中不重要”:智能匹配运算符在5.10.0中设计得不好,这使得可靠使用变得困难,并且使得给定/何时构造不如它可能的有用,因此语义被5.10.1更改,所有未来的版本都会假装5.10.0版本从未存在。

    在5.10.1+版本的智能匹配中,左操作数和右操作数 ~~ 总是被清楚地对待。就像 =~ regex match运算符,左侧是匹配的“主题”,右侧是要匹配的“模式”——无论是纯标量、regex、数组或哈希引用、代码引用或其他。这些细节在Perlsyn中非常详细。

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

        2
  •  18
  •   Evan Carroll    14 年前

    智能匹配,请参见 perldoc perlsyn

    根据评论中的请求,我将给出更多: 智能匹配是一个用于任意数据类型的运算符,这些数据类型试图理解一个只知道参数类型的相等测试,许多测试需要复杂的操作,如迭代和regex应用程序。

        3
  •  5
  •   JasonTrue    14 年前

    (从LearnPerl中被盗):二进制“~~”在其参数之间进行智能匹配。

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

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

        4
  •  5
  •   Zombo    10 年前

    它是 smartmatch operator .

    一般来说,当您需要有关Perl中运算符的信息时,请参见 perldoc perlop

    推荐文章