Perl 5.20和智能匹配的命运何时?

Eva*_*oll 63 perl perl5 smartmatch

我刚刚安装了Perl 5.18,我收到很多这样的警告,

given is experimental at .\[...].pl line [...].
when is experimental at .\[...].pl line [...].
Smartmatch is experimental at C:/strawberry/perl/site/lib/[...] line [...].
Run Code Online (Sandbox Code Playgroud)

看看这些警告 - 我从未在任何地方听到过这些警告 - 我只能在两个地方找到这个警告,

Perl Delta仍然能够最大限度地提及这些功能正在发生的事情,它被埋在吊舱中的一半,

在v5.10.0中添加并在v5.10.1中进行了重大修订的智能匹配一直是一个常见的投诉点.尽管有许多方法可用,但它也证明了Perl的用户和实现者都存在问题和困惑.关于如何最好地解决问题,已经提出了许多建议.很明显,smartmatch几乎肯定会在将来改变或消失.不建议依赖其当前行为.现在,当解析器看到〜,给定或何时发出警告.

我对过去10年中Perl最显着的变化如何被拉动感到困惑.我已经开始使用given,when以及smartmatch所有地方.还有关于这些未来的更多信息吗?怎么有人发现它们"令人困惑?" 这些功能如何变化?是否有计划使用模块实现这些功能?

ike*_*ami 37

智能匹配的设计存在问题.任何给定的TYPE ~~ TYPE应该做的决定通常是不明显的,不一致的和/或有争议的.这个想法不是要删除智能匹配; 这是解决它.

具体而言,~~将大大简化,正如您在5.18 pumpking 的提案中所看到的那样.关于两件事如何匹配的决定将通过辅助工具完成,例如Smart :: Match中已存在的辅助工具.

... ~~ any(...)
Run Code Online (Sandbox Code Playgroud)

更具可读性,更灵活(完全可扩展),并解决了许多问题(例如"何时应将X视为数字,何时应将其视为字符串?").

  • 哇,我没见过Smart :: Match!这太棒了!leont ++ (6认同)

Joe*_*ger 21

通过阅读rjbs对smartmatch的建议更改,可能会获得一些见解.毕竟,他是南京(Perl发布经理),所以他的评论和他对未来的看法比大多数人更有意义.关于这个问题还有很多社区评论,比如这里."实验"状态是有效的,因为事情可能会在未来发生变化,即使我们不知道这些变化会是什么,也有责任告知用户这一事实.


rai*_*7ow 9

嗯,这就是在将这组功能降级为实验的补丁说明中所说的:

给定/ when/~~的行为可能会在perl 5.20.0中发生变化:智能匹配将被删除或删除.鉴于此,应警告这些功能的用户.在使用这些功能时,应为这些功能发出类别"experimental :: smartmatch"警告.

所以,你可以用这样的东西()确实关闭这些警告:

no if $] >= 5.018, warnings => "experimental::smartmatch";
Run Code Online (Sandbox Code Playgroud)

......它只是让你的眼睛远离问题.

  • 这不是关于如何关闭这些警告,而是关于Smartmatch /给定/何时出错以及如何解决问题.路线图只是"改变未来",没有确定的方向. (8认同)
  • BTW可以使用[`使用exporimental'martmatch';`pragma](https://metacpan.org/module/experimental)来关闭警告(而不是"官方"和丑陋的方式). (3认同)