我想在for
循环使用break
声明,但因为我也在我的Perl代码使用严格的潜艇,我得到一个错误说:如何摆脱Perl中的循环?
裸词“破发”不准而 “严格潜艇”在使用中./final.pl 线154
有没有一种解决方法(除了禁用严格的潜艇)?
我的代码的格式如下:
for my $entry (@array){
if ($string eq "text"){
break;
}
}
我想在for
循环使用break
声明,但因为我也在我的Perl代码使用严格的潜艇,我得到一个错误说:如何摆脱Perl中的循环?
裸词“破发”不准而 “严格潜艇”在使用中./final.pl 线154
有没有一种解决方法(除了禁用严格的潜艇)?
我的代码的格式如下:
for my $entry (@array){
if ($string eq "text"){
break;
}
}
虽然这仅仅是一种语义上的差异,除了与“下一个”命令的文本一致性之外,它并不等于其他很多。 – 2010-07-08 20:14:58
更不用说,'break'是一个实验性的关键词,在> 5.010的权利?所以你可能会得到一个非法的外部给定的块错误,而不是你应该使用它。唯一可行的方法是,如果你在给定块内使用了一个while循环,然后中断,这在理论上会按照你想要的方式工作(并且只有)给定的块只有while循环,并且假设你只是给了一些标量变量......但为什么所有这些工作只是为了休息一下,它是(非常)糟糕的形式,更不用说了(blah!)只是说,它的“可能”不是一个好东西想法并不是你可能认为这是 – osirisgothra 2014-09-01 15:50:29
由于某种原因,我完全无法记住这个关键字'最后'。总是以Google搜索'perl break loop'结尾:( – Thupten 2015-09-08 04:50:02
附加数据(如果您有更多的问题):
FOO: {
for my $i (@listone){
for my $j (@listtwo){
if (cond($i,$j)){
last FOO; # --->
# |
} # |
} # |
} # |
} # <-------------------------------
在我喜欢使用中断大迭代。只需按下Ctrl键+Ç到退出:
my $exitflag = 0;
$SIG{INT} = sub { $exitflag=1 };
while(!$exitflag) {
# Do your stuff
}
只需last
将在这里工作:
for my $entry (@array){
if ($string eq "text"){
last;
}
}
如果您有嵌套循环,然后last
会从最里面的退出。在这种情况下使用标签:
LBL_SCORE: {
for my $entry1 (@array1){
for my $entry2 (@array2){
if ($entry1 eq $entry2){ # or any condition
last LBL_SCORE;
}
}
}
}
鉴于last
声明将使编译器从两个环路出来。在任何数量的循环中都可以做到这一点,并且标签可以在任何地方固定。
如果你没有“严格的潜艇”,你会得到一个运行时错误,而不是找到一个名为“break”的子。 – 2008-11-19 20:43:16