Perl解释器默认使用哪个版本?

4
我用given/when写了一个简单的脚本来尝试这个功能,但是我一直得到编译错误。最后,我在脚本顶部包含了use 5.010_001;,想着也许我的Perl版本太旧无法使用given/when。它起作用了。
然后我用$]打印了我的Perl版本并使用它:use 5.018_002;,也可以工作。为什么Perl默认不使用最新安装的版本的功能呢?

Perl解释器默认使用哪个版本? 取决于您在shebang中指定的内容,或者在PATH中首先出现的内容,具体取决于您如何调用脚本。您真正想知道的是默认启用了哪些功能;请参阅perldoc feature - ThisSuitIsBlackNot
1
你可以将 use 5.<...> 视为指定要使用的语言版本。出于向后兼容性的原因,默认情况下不会获取最新版本。 - ikegami
2
请注意,givenwhen是实验性的,并且很可能会发生变化。 - ikegami
@ikegami 是的,use warnings; 一直在提醒我。 - Novice
1
它告诉你第一部分,但不是第二部分。大多数实验性的东西确实都是不变的,但这里情况并非如此。它绝对是一个有缺陷的设计,不适合使用。最近有人试图推进修复这个问题,但实际上揭示出前进的道路并不清晰。 - ikegami
在此期间,您会使用什么替代方案?if/elsif - Novice
1个回答

7
该声明
use VERSION;

隐式的意思是什么?

no feature ':all';
use feature ':VERSION';

因此:

为什么Perl默认情况下不使用最新版本的功能?

根据perldoc feature

通常无法向Perl添加新语法而不破坏某些现有程序。这个编译指示提供了一种最小化风险的方法。可以通过use feature 'foo'启用新的句法结构或旧结构的新语义含义,只有在适当的编译指示在范围内时才会解析。


有道理。谢谢。 - Novice

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接