我试图在for循环中使用break语句,但由于我也在Perl代码中使用了严格的sub,所以我得到了一个错误提示:
暂不允许使用“break”字样 在./final.pl中使用的"strict subs 第154行。
有什么解决办法吗(除了禁用严格的sub)?
我的代码格式如下:
for my $entry (@array){
if ($string eq "text"){
break;
}
}
我试图在for循环中使用break语句,但由于我也在Perl代码中使用了严格的sub,所以我得到了一个错误提示:
暂不允许使用“break”字样 在./final.pl中使用的"strict subs 第154行。
有什么解决办法吗(除了禁用严格的sub)?
我的代码格式如下:
for my $entry (@array){
if ($string eq "text"){
break;
}
}
当前回答
哦,我找到了。你用last代替break
for my $entry (@array){
if ($string eq "text"){
last;
}
}
其他回答
哦,我找到了。你用last代替break
for my $entry (@array){
if ($string eq "text"){
last;
}
}
对于带有隐式循环(使用-n或-p命令行选项)的Perl一行程序,使用last或last 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。
参见:
最后一个文档 最后,下一步,重做,继续-一个示例 Perlrun:命令行切换文档
Perl一行程序中last的更多示例:
在第一次匹配后中断一行命令行脚本 打印一个大文件的前N行
其他数据(以防您有更多问题):
FOO: {
for my $i ( @listone ){
for my $j ( @listtwo ){
if ( cond( $i,$j ) ){
last FOO; # --->
# |
} # |
} # |
} # |
} # <-------------------------------
简单的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;
}
}
}
}
给定最后一个语句将使编译器从两个循环中出来。同样的事情可以在任意数量的循环中完成,标签可以固定在任何地方。
在大型迭代中,我喜欢使用中断。只需按Ctrl + C退出:
my $exitflag = 0;
$SIG{INT} = sub { $exitflag=1 };
while(!$exitflag) {
# Do your stuff
}