Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 5.20和智能匹配的命运_Perl_Smartmatch - Fatal编程技术网

Perl 5.20和智能匹配的命运

Perl 5.20和智能匹配的命运,perl,smartmatch,Perl,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 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仍然是最值得一提的特性。它埋在半深的舱里

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


我对Perl在过去10年中最重要的变化是如何被拉出来的感到困惑。我已经开始到处使用
given
when
smartmatch
。还有关于这些期货的更多信息吗?怎么会有人觉得它们“令人困惑?”这些特性可能会发生什么变化?是否有计划通过模块实现这些功能?

好吧,这就是将这组功能降级为实验性功能的补丁中所说的:

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

因此,虽然您确实可以关闭这些警告,但可以使用类似以下()的方法:


。。。这只是让你的目光从问题上移开。

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

具体来说,
~~
将大大简化,正如您在5.18南瓜中看到的那样。关于两件事如何匹配的决定将由助手来完成,比如已经存在于中的助手


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

通过阅读可以获得一些见解。毕竟,他是pumpking(Perl发布管理者),因此他的评论和他对未来的看法比大多数人更相关。社会上对此事也有很多评论;例如,见。“实验”状态之所以有效,是因为,由于未来情况可能会发生变化,它有责任通知用户这一事实,即使我们不知道这些变化会是什么。

错误的文件。你有5.18分,所以请阅读5.18分的perldelta。前几天我读到了关于Perlbuzz的文章。问得好,IMHO!注意:5.20中的现状。“Perl 5.20,现在更像Perl 5.08而不是5.16!”问题不在于如何关闭这些警告,而在于Smartmatch/给定/何时以及如何解决问题。路线图只是“向前改变”,没有明确的方向。好吧,我已经回答了我能回答的部分问题。关于
为什么它让人困惑的部分,我只能让你参考一下-在我看来,它很好地描述了问题的核心。)但话说回来,我想这与观点无关。@EvanCarroll是的,这就是“实验性”的意思。这意味着“我们不知道这在将来会如何工作,但很有可能它不会像这样工作,并且您的代码可能会中断”。顺便说一句,您可以使用它关闭警告(而不是“官方”和丑陋的方式)。好的一面是,“官方”和丑陋的方式实际上会在口译员v5.10到v5.18上工作。我想人们将被要求支持v5.18超过下周。哇,我还没有看到Smart::Match!这太可怕了!leont++(至少,这是我对现状的理解。当然,这一切都不是一成不变的。)根据最近的讨论,我预计在2017年5月左右(以及在此之前的开发版本)5.26会有变化。有趣的是,你有支持性的参考资料吗?我很有兴趣阅读。对于未来的读者,我相信这就是池上所指的主题:
no if $] >= 5.018, warnings => "experimental::smartmatch";
... ~~ any(...)