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

时间:2013-02-24 16:28:32

标签: perl

我的机器上安装了5.14.2但是当我尝试使用say关键字执行打印语句时,它会给我错误。

我使用use关键字使程序正常运行。

#!/usr/bin/perl
use feature ':5.10';
say "hello";

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

2 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:5)

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

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

use strict;
use warnings;
sub say { print 1; }
say();

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

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

use v5.14;
use strict;
use warnings;
sub say { print 1; }
say();

现在它在*第5行使用未初始化的值$ _时会失败。*

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