perl given-when结构语法错误

时间:2016-04-15 23:40:59

标签: perl

我正在尝试使用given-when结构编写一个小数字猜测程序,但我的终端一直给我语法错误,任何人都知道什么可能出错?

use strict;
my $secret = int(1 + rand 100);
my $flag = 0;
my $guess;
print "Here\n";
while($flag == 0){
    print "Please guess a number:\n";
    chomp($guess = <STDIN>);
    given($guess){ #-------------- line 13
        when($_ < $secret){print "Too Low\n"}
        when($_ > $secret){print "Too High\n"}
        when($_ == $secret){print "You've guessd it!";$flag = 1}
        default {print "User chose to exit";$flag = 1}
    }
}

错误讯息:

  语法错误在./Learning_perl_chapt15.pl第13行,靠近“){”语法   错误在./Learning_perl_chapt15.pl第15行,接近“){”语法错误   ./Learning_perl_chapt15.pl第16行,接近“;}”语法错误   ./Learning_perl_chapt15.pl第17行,靠近“;}”执行   ./Learning_perl_chapt15.pl由于编译错误而中止。

1 个答案:

答案 0 :(得分:1)

如果您在程序的顶部添加use feature 'switch',它应该可以正常工作。

来自perlsyn

  

切换语句
  从Perl 5.10.1开始,您可以说

use feature 'switch'; 
     

启用实验切换功能。   在&#34;开关&#34;功能,Perl获得实验性关键字given,   whendefaultcontinuebreak。从Perl 5.16开始,可以   使用CORE::为switch关键字添加前缀,以便在没有a的情况下访问该功能   use feature声明。

注意

添加use feature 'switch'会让您的程序运行时不会出现语法错误,但您仍然可以收到类似警告:

given is experimental at ./test.pl line 16.
when is experimental at ./test.pl line 17.

原因是givenwhen使用实验性智能匹配运算符。有关示例和更多信息,请参阅The Effective Perler的博文Experimental features now warn (reaching back to v5.10)

要关闭这些警告,您可以添加

no warnings 'experimental::smartmatch';

use feature 'switch'语句之后。但请注意,这些警告是在Perl 5.18中添加的,因此如果您计划在早期的Perl版本上运行代码,则应使用

no if $] >= 5.018, warnings => 'experimental::smartmatch';

反而避免"Unknown warnings category"失败。

最后,通过使用experimental编译指示,可以更轻松地处理所有这些考虑因素  将use feature 'switch'替换为:

use experimental 'switch';

后者应启用该功能并在一个声明中关闭警告。