我正在尝试使用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由于编译错误而中止。
答案 0 :(得分:1)
如果您在程序的顶部添加use feature 'switch'
,它应该可以正常工作。
来自perlsyn:
切换语句
从Perl 5.10.1开始,您可以说use feature 'switch';
启用实验切换功能。 在&#34;开关&#34;功能,Perl获得实验性关键字
given
,when
,default
,continue
和break
。从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.
原因是given
和when
使用实验性智能匹配运算符。有关示例和更多信息,请参阅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';
后者应启用该功能并在一个声明中关闭警告。