【问题标题】:What does " ~~ " mean in Perl?Perl 中的“~~”是什么意思?
【发布时间】:2011-03-06 21:54:39
【问题描述】:

SO answer daxim 状态:

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

draegtun 回复:

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

关于~~ 的小入门如何,其中包含指向来源的链接,包括以下具体问题:~~ 是什么? ~~ 叫什么?为什么顺序在一个版本中很重要,但在以前的版本中不重要?

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

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

【问题讨论】:

  • 人们几乎对这里的每个答案都给出了负面影响,我什至不敢考虑发帖! :P
  • 如果您在阅读官方文档后有具体问题要问,请提出。
  • @C.W.Holeman:你是真的在问,还是只是在重申这个问题?我认为反对者可能会对您似乎不愿意在命令行中简单地键入“perldoc perlsyn”做出反应。
  • TFM 链接指向以“智能匹配的行为取决于”开头的段落。它基本上是一个附录,其中包含几十个 ~~ 操作符的条目表,以参考 switch 功能。稍加注意,就可以确定智能匹配是否需要开关功能。它真的独立于开关工作吗?一个很好的介绍或入门非常有用,可以为不熟悉智能匹配的人节省时间,同时扩大这种 Perlism 的曝光率。如果它们已经存在,几个独立的段落会很好或链接。
  • +1 - 对于那些对此问题投反对票的人,在 Google 或 perldoc.perl.org 上搜索 ~~ 不会产生任何结果。谷歌正在过滤掉它,而 perldoc 似乎没有找到它(或“智能匹配”顺便说一句......)。不幸的是,SO 的搜索引擎似乎也不喜欢它......也许应该在 meta 中启动一个线程来讨论修复这个问题,因为在程序员的 QA 站点中搜索时,任何字符都不应该越界。

标签: perl terminology smartmatch


【解决方案1】:

专门回答“为什么顺序在一个版本中很重要,但在以前的版本中不重要”:智能匹配运算符在 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 未涵盖的唯一部分问题。
  • @Michael Carman:因为 ~~ 在搜索“~~ 叫什么?”时效果不佳。解决如何在 TFM 中找到它。
  • @C.W.Holeman II:你会问=~ 是什么吗? && 怎么样?您也可以对这些提出相同的“难以搜索”声明。除非您询问像 =()= 这样的伪运算符或像 $x-->5 这样的混淆,否则答案仍然相同:请参阅 perlop 和 perlsyn。
  • 供参考的是在 5.10.1 宣布智能匹配更改的 perldoc:search.cpan.org/~dapm/perl-5.10.1/pod/…
【解决方案2】:

智能匹配,见perldoc perlsyn

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

【讨论】:

  • 这又是……在该链接后面详细说明。
  • 我想这很难用简单的语言来解释。 :-/
  • @支持。 SO中的许多复制粘贴粉丝。
  • 我只是认为,除非您有超出文档的问题——这很好,它们应该是第一个参考点。我很乐意回答“什么是 $foo”,除了那个链接的内容之外,我只是不知道从哪里开始。
  • @Evan,我和你在一起。我会在一些问题上做同样的事情。我只是想它很简单:是 xyz 的运算符,abcd。我对链接没问题(反正我不会读它,我不 perl :P)
【解决方案3】:

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

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

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

【讨论】:

  • 显然回答“什么是 ~~?叫什么 ~~?关于 ~~ 的小入门如何,带有指向源的链接”值得一票。诚然,我没有回答“为什么顺序在一个版本中很重要,但在以前的版本中不重要”,但我链接到的页面隐含地回答了。
【解决方案4】:

这是 smartmatch operator.

一般来说,当您想了解有关 Perl 中运算符的信息时,请参阅 perldoc perlop

【讨论】:

    猜你喜欢
    • 2018-03-05
    • 2010-12-28
    • 2023-03-25
    • 2020-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多