为什么我必须指定"使用功能:5.1x",即使我的安装的perl是5.14?

chi*_*ori 8 perl

我在我的机器上安装了5.14.2,但是当我尝试用say关键字执行print语句时,它给了我错误.

我已经使用use关键字使程序运行没有错误.

#!/usr/bin/perl
use feature ':5.10';
say "hello";
Run Code Online (Sandbox Code Playgroud)

与5.010相比,5.14.2是最新的,所以它应该默认启用所有这些功能吗?那么使用use关键字指定版本有什么意义呢?

JRF*_*son 10

Perl尝试保持向后兼容性.现有脚本很可能有子程序命名say.关于Perl的某些未来版本是否应该停止这些努力并简化其内部结构,正在进行相当多的讨论.例如,请参阅命名和编号perl.


Que*_*tin 5

它可以防止与用Perl编写的现有程序发生冲突.

例如,假设我为Perl 5.6编写了一个程序,它定义了一个名为的子程序say.

use strict;
use warnings;
sub say { print 1; }
say();
Run Code Online (Sandbox Code Playgroud)

这工作正常(输出1),它仍然适用于包含该say功能的perls .

现在让我们启用本机say,看看会发生什么:

use v5.14;
use strict;
use warnings;
sub say { print 1; }
say();
Run Code Online (Sandbox Code Playgroud)

现在,它会在*第5行*中使用未初始化的值$ _*

您需要use feature或者use v5.xx可以安全地加载新功能,即当作者知道他想要使用它们时.