perl5.20与命运的智能匹配和给定的时候

wgeznvg7  于 2023-10-24  发布在  Perl
关注(0)|答案(3)|浏览(154)

我刚刚安装了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几乎肯定会改变,不建议依赖它当前的行为。当解析器看到~~、given或when时,将发出警告。
我对Perl在过去10年中最重要的变化是如何实现的感到困惑。我已经开始到处使用givenwhensmartmatch。关于这些未来有更多的信息吗?人们如何发现它们“令人困惑”?这些功能可能会如何改变?有计划用模块实现这些功能吗?

js81xvg6

js81xvg61#

智能匹配的设计存在问题。任何给定的TYPE ~~ TYPE应该做什么的决定通常是不明显的,不一致的和/或有争议的。这个想法不是要删除智能匹配;它是要修复它。
【更新:在5.38的发行说明中,宣布智能匹配将从Perl 5.42中完全删除。以下预测不再准确。
具体来说,~~将被大大简化,正如你在5.18 pumpking中看到的proposal一样。关于两个东西应该如何匹配的决定将通过辅助程序来完成,比如那些已经存在于Smart::Match中的辅助程序。

... ~~ any(...)

它的可读性更强,灵活性更高(完全可扩展),并解决了许多问题(例如“什么时候应该将X视为数字,什么时候应该将其视为字符串?”)。

68de4m5k

68de4m5k2#

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

vsnjm48y

vsnjm48y3#

好吧,这就是在the description补丁中所说的,该补丁将这组功能降级为实验性的:
perl 5.20.0中given/when/~~的行为可能会改变:smartmatch将被删除或剥离。鉴于此,这些功能的用户应该得到警告。当使用这些功能时,应该为它们发出类别“experimental::smartmatch”警告。
因此,虽然您确实可以关闭这些警告,但可以使用类似这样的命令(source):

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

……这只是让你忽略了问题。

相关问题