这个问题可能很愚蠢。但我刚开始探索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版本?
答案 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