Perl 5.20和智能匹配和给定时间的命运?

我刚刚安装了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 [...]. 

研究这些警告 – 我从来没有听说过任何地方 – 我只能在两个地方find这个警告,

  • perldelta为5.18 ,这只是真的提到说,该function已被降级为实验
  • 这个nntp.perl.org的post

Perl Delta对于这些特性发生了什么事情仍然是最有说服力的,它已经被埋在了pod中,

智能匹配,在v5.10.0中添加,并在v5.10.1中进行了重大修改,一直是一个常见的投诉点。 虽然有很多方法是有用的,但对于Perl的用户和实现者来说,它也被certificate是有问题和困惑的。 关于如何最好地解决这个问题已经有了一些build议。 很明显,智能匹配几乎肯定要么改变,要么将在未来消失。 不build议依靠其目前的行为。 当parsing器看到~~,给定或什么时候,警告将被发出。

我很困惑Perl在过去10年中最重大的变化如何被拉扯。 我已经开始使用givenwhensmartmatch到处。 有关于这些未来的更多信息吗? 有谁发现他们“困惑?” 这些function如何可能改变? 是否有计划用模块实现这些function?

3 Solutions collect form web for “Perl 5.20和智能匹配和给定时间的命运?”

智能匹配的devise存在问题。 TYPE ~~ TYPE应该做什么的决定通常是不明显的,不一致的和/或有争议的。 这个想法不是去除智能匹配; 这是解决它。

具体来说, ~~将大大简化,你可以在5.18 pumpking的提案中看到。 关于两件事情应该如何匹配的决定将通过诸如已经存在于Smart :: Match中的助手完成。

 ... ~~ any(...) 

更可读,更灵活(完全可扩展),并解决了一些问题(如“X应该被视为一个数字,什么时候应该被视为一个string?”)。

通过阅读rjbs对smartmatch提出的更改,可以获得一些见解。 毕竟他是一个抽取(Perl释放pipe理器),所以他的评论和他对未来的看法比大多数都更有意义。 关于这个问题,社区也有很多评论,比如这里 。 “实验”状态是有效的,因为事情有可能在将来发生变化,所以即使我们不知道这些变化是什么,它也有责任告知用户这个事实。

那么,这个补丁的描述就是这样说的,这个特性降级到实验性的:

给定的/ when / ~~的行为很可能在perl 5.20.0中改变:智能匹配将被删除或剥离。 鉴于此,应该警告这些function的用户。 在使用这些function时,应该为“实验::智能匹配”类别发出警告。

所以,你真的可以把这些警告closures,像这样( 来源 ):

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

这只是把你的眼睛从这个问题。