我刚刚安装了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 [...].
查看这些警告--我从来没有在任何地方听到过--我只能在两个地方找到这个,
- perldelta for 5.18,它只提到了这个功能已经降级到 * 实验 *?
- this nntp.perl.org post
Perl Delta仍然给予最多的提及,关于这些特性发生了什么。
在v5.10.0中添加并在v5.10.1中进行了重大修改的智能匹配一直是人们抱怨的焦点。尽管它在许多方面都很有用,对于Perl的用户和实现者来说,它也被证明是有问题的和令人困惑的。关于如何最好地解决这个问题,有很多建议。很明显,smartmatch几乎肯定会改变,不建议依赖它当前的行为。当解析器看到~~、given或when时,将发出警告。
我对Perl在过去10年中最重要的变化是如何实现的感到困惑。我已经开始到处使用given
,when
和smartmatch
。关于这些未来有更多的信息吗?人们如何发现它们“令人困惑”?这些功能可能会如何改变?有计划用模块实现这些功能吗?
3条答案
按热度按时间js81xvg61#
智能匹配的设计存在问题。任何给定的
TYPE ~~ TYPE
应该做什么的决定通常是不明显的,不一致的和/或有争议的。这个想法不是要删除智能匹配;它是要修复它。【更新:在5.38的发行说明中,宣布智能匹配将从Perl 5.42中完全删除。以下预测不再准确。
具体来说,
~~
将被大大简化,正如你在5.18 pumpking中看到的proposal一样。关于两个东西应该如何匹配的决定将通过辅助程序来完成,比如那些已经存在于Smart::Match中的辅助程序。它的可读性更强,灵活性更高(完全可扩展),并解决了许多问题(例如“什么时候应该将X视为数字,什么时候应该将其视为字符串?”)。
68de4m5k2#
通过阅读rjbs's proposed changes to smartmatch可能会获得一些见解。他是抽水机(Perl发布经理)毕竟,所以他的评论和他对未来的看法比大多数人更相关。例如,见here。“实验”状态有效,因为,由于事情可能会在未来发生变化,它有责任告知用户这一事实,即使我们不知道这些变化将是什么。
vsnjm48y3#
好吧,这就是在the description补丁中所说的,该补丁将这组功能降级为实验性的:
perl 5.20.0中given/when/~~的行为可能会改变:smartmatch将被删除或剥离。鉴于此,这些功能的用户应该得到警告。当使用这些功能时,应该为它们发出类别“experimental::smartmatch”警告。
因此,虽然您确实可以关闭这些警告,但可以使用类似这样的命令(source):
……这只是让你忽略了问题。