使用say函数时,为什么要指定use语句?

时间:2016-05-12 10:56:48

标签: perl

这个问题可能很愚蠢。但我刚开始探索Perl。我使用的是Perl v5.16.2。我知道在{5.1}中已经引入了say语句。

#!/usr/bin/perl

say "Hello World!";

当我尝试运行以上程序时,我收到以下错误:

$ ./helloPerl 
String found where operator expected at ./helloPerl line 3, near "say "Hello World!""
    (Do you need to predeclare say?)
syntax error at ./helloPerl line 3, near "say "Hello World!""
Execution of ./helloPerl aborted due to compilation errors.

但是当我添加语句use 5.016;时,它正在给我正确的输出。

#!/usr/bin/perl

use 5.016;
say "Hello World!";

我怀疑是,我使用的是perl v5.16.2,它高于5.010。我为什么要在这里使用use语句提及Perl版本?

2 个答案:

答案 0 :(得分:18)

可能会破坏向后兼容性的功能,默认情况下不会启用。

请参阅perldoc feature

  

在不破坏某些现有程序的情况下,通常无法向Perl添加新语法。该pragma提供了一种最小化风险的方法。新的句法结构或旧结构的新语义含义可以通过使用功能“foo”来实现。 ,仅当适当的特征编译指示在范围内时才会被解析。 (尽管如此,无论此编译指示如何,CORE ::前缀都提供对所有Perl关键字的访问权限。)

版本号上的

use隐式启用所有功能,因为它还对perl版本应用约束。因此,例如,say没有被实施,你就不会被绊倒。

答案 1 :(得分:15)

say是一个功能,它不是(还有 - 会不会是?)常规的perl语法。

使用

use feature qw(say);

use v5.010; # or any version later