【问题标题】:Smartmatch from 5.27 ~~ vs =~从 5.27 开始的智能匹配 ~~ vs =~
【发布时间】:2019-09-13 03:46:38
【问题描述】:

我现在正在使用 Perl 5.24,例如,smartmatch 是一个很棒的多功能运算符,

%foobar ~~ @foo; 

以及其中的所有复杂性。

我了解到,从 5.27 起,它的功能将减少到涉及的智能手表,

$foo = qr/foo/; 

好的,所以我将不得不重写我的数据管道以使其符合要求。

我的问题是,如果确认两者之间有什么不同,

'foo' ~~ $foo;

和,

 'foo' =~ /$foo/;

让我感到震惊的是,除了名称之外,智能匹配正在被删除。我是对的,如果不是,我错过了什么?

历史

它有不寻常的历史,必须强调它被归类为实验性的。我正在绘制我所知道的图表。我想你们中的许多人会知道更多,任何输入都会有所帮助,因为它是语言进化的一个例子(给学生):

  • 5.10首发
  • 5.14 引入 %foobar ~~ @foo 类型匹配
  • 5.27 除名称外全部删除?仍处于实验阶段?

【问题讨论】:

  • 5.10.1 对其进行了一些重大更改。 (是的,在 maint 版本中。他们在 smartmatch 方面真的丢球了。)
  • Smartmatch 将从 5.28 中删除——甚至提交了一个补丁——但太多人正在使用这个损坏的功能。前进的道路尚不清楚,但智能匹配目前保持不变(并且随时可能更改/删除)。

标签: regex perl


【解决方案1】:

智能匹配仍处于试验阶段。

如果我们有时间机器,大多数从事 perl 开发的人都会回到过去,并从 perl5 中删除智能匹配。 smart match 所做的唯一一件事就是清楚地表明,如果它比say 更复杂,那么从 perl6 中获取一些东西并尝试将其固定到 perl5 中是行不通的。

没有人知道 perl5 中智能匹配的未来会是什么。没有关于它应该是什么的协议。如果不是因为可怕的“向后兼容性”,smart match 早就死了。

给自己一个痛苦的世界,不要使用智能匹配。

【讨论】:

  • 我希望你能原谅我的无知,但听起来你是在说你自己是开发 perl 的团队的一员。您是否有机会在此处的回答中提及您在项目中的角色?
  • Hrm,试图找到a concise summary of smart match at the archives of perl5.porters。我很高兴你在这里提供了一个摘要,因为我没有发现通过档案的网络界面进行蒸馏非常容易。
  • 我会很不情愿地签字。从本质上讲,我认为智能手表已从 5.27 中删除似乎只是一个谣言。如果实施,它会强制从当前代码中删除(我们别无选择)。关于 smartmatch 出了什么问题的问题仍然存在,虽然我听说达米安康威从不喜欢它(只是一个谣言),但不清楚为什么会有这样的负面影响。
  • @MichaelG。 “smartmatch 出了什么问题”——很多而且很深,所以很难修复。它的设计极其复杂(且不一致),是什么使得很难(实际上困难)弄清楚它在许多情况下要做什么,或者如何正确使用它。您可以按照您的预期使用它(一个要使用的功能),仅用于最基本的用途——而它的功能是它的十倍。众所周知,事后诸葛亮很容易,但这确实不好,不应该使用。
  • @MichaelG。部分资源:this pagethis question下的cmets/links
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-11
  • 2010-12-23
  • 2011-01-01
  • 1970-01-01
  • 2021-11-06
  • 1970-01-01
  • 2015-06-18
相关资源
最近更新 更多