我的机器上安装了 5.14.2,但是当我尝试使用say
关键字执行打印语句时,它给了我错误。
我已经使用 use 关键字使程序运行无误。
#!/usr/bin/perl
use feature ':5.10';
say "hello";
与 5.010 相比,5.14.2 是最新的,所以它应该默认启用所有这些功能,对吗?那么使用use
关键字指定版本有什么意义呢?
我的机器上安装了 5.14.2,但是当我尝试使用say
关键字执行打印语句时,它给了我错误。
我已经使用 use 关键字使程序运行无误。
#!/usr/bin/perl
use feature ':5.10';
say "hello";
与 5.010 相比,5.14.2 是最新的,所以它应该默认启用所有这些功能,对吗?那么使用use
关键字指定版本有什么意义呢?
Perl 试图保持向后兼容性。现有脚本很可能有名为say
. 关于 Perl 的某个未来版本是否应该停止这些努力并简化其内部结构,正在进行大量讨论。例如,参见命名和编号 perl。
它可以防止与用 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();
现在它因 *Use of uninitialized value $_ in say at - line 5.* 而失败
您需要use feature
或use v5.xx
这样才能安全地加载新功能,即当作者知道他想使用它们时。