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

时间:2013-06-04 20:37:25

标签: 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 [...].

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

Perl Delta仍然能够最大限度地提及这些功能的发生情况,它位于吊舱中的一半,

  

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

我很担心过去10年中Perl最显着的变化是如何被拉动的。我已开始在所有地方使用givenwhensmartmatch。还有关于这些未来的更多信息吗?怎么有人发现它们“令人困惑?”这些功能如何变化?是否有计划使用模块实现这些功能?

3 个答案:

答案 0 :(得分:36)

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

具体来说,~~将大大简化,正如您在proposal中通过5.18丰富的内容所看到的那样。关于两件事情应该如何匹配的决定将通过助手来完成,例如Smart::Match中已经存在的助手。

... ~~ any(...)

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

答案 1 :(得分:21)

阅读rjbs's proposed changes to smartmatch可能会获得一些见解。毕竟,他是南京(Perl发布经理),所以他的评论和他对未来的看法比大多数人更有意义。关于此事也有很多社群评论,例如here。 “实验”状态是有效的,因为由于事情可能在未来发生变化,因此即使我们不知道这些变化会是什么,也有责任告知用户这一事实。

答案 2 :(得分:9)

嗯,这就是补丁的description中所说的将这组功能降级为实验性的内容:

  

perl 5.20.0中给定/ when / ~~的行为可能会发生变化:   智能匹配将被删除或剥离。有鉴于此,   应警告这些功能的用户。一个类别   应为这些功能发出“experimental :: smartmatch”警告   当它们被使用时。

你真的可以用这样的话来解决这些警告(source):

no if $] >= 5.018, warnings => "experimental::smartmatch";

......这只是让你的目光远离问题。