如何在Perl中跳出循环?

我试图在for循环中使用break语句,但由于我也在Perl代码中使用了严格的sub,所以我得到了一个错误提示:

裸词“break”不允许while 在./final.pl中使用的"strict subs 第154行。< / p >

有什么解决办法吗(除了禁用严格的sub)?

我的代码格式如下:

for my $entry (@array){
if ($string eq "text"){
break;
}
}
598484 次浏览

哦,我找到了。你使用最后的而不是打破

for my $entry (@array){
if ($string eq "text"){
last;
}
}

其他数据(以防您有更多问题):

FOO: {
for my $i ( @listone ){
for my $j ( @listtwo ){
if ( cond( $i,$j ) ){


last FOO;  # --->
# |
}                 # |
}                        # |
}                           # |
} # <-------------------------------

在大型迭代中,我喜欢使用中断。只需按Ctrl + C退出:

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语句将使编译器从两个循环中出来。同样的事情可以在任意数量的循环中完成,标签可以固定在任何地方。

对于带有隐式循环的Perl一行程序(使用-n-p命令行选项),使用lastlast LINE来打破遍历输入记录的循环。例如,这些简单的例子都打印输入的前2行:

echo 1 2 3 4 | xargs -n1 | perl -ne 'last if $. == 3; print;'
echo 1 2 3 4 | xargs -n1 | perl -ne 'last LINE if $. == 3; print;'
echo 1 2 3 4 | xargs -n1 | perl -pe 'last if $. == 3;'
echo 1 2 3 4 | xargs -n1 | perl -pe 'last LINE if $. == 3;'

所有的印刷:

1
2
perl一行程序使用这些命令行标志 -e:告诉Perl在行中寻找代码,而不是在文件中。
-n:每次循环输入一行,默认情况下将其赋值给$_
-p:与-n相同,同样在每次循环迭代输入后添加print

参见:

< p > last文档
__ABC0, __ABC1, __ABC2, continue - 一个举例
Perlrun:命令行切换文档 < / p >

Perl一行程序中last的更多示例:

< p > 在第一次匹配后中断一行命令行脚本
打印一个大文件的前N行 < / p >