如何摆脱Perl中的循环?
我试图在for
循环中使用break
语句,但由于我在我的Perl代码中也使用了严格的subs,所以我得到一个错误:
在./final.pl第154行使用“strict subs”时不允许使用Bareword“break”。
有没有解决这个(除了禁用严格的潜艇)?
我的代码格式如下:
for my $entry (@array){ if ($string eq "text"){ break; } }
哦,我find了。 你用last
而不是break
for my $entry (@array){ if ($string eq "text"){ last; } }
其他数据(如果您有更多的问题):
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; } } } }
鉴于last
声明将使编译器从两个循环出来。 在任何数量的循环中都可以做到这一点,标签可以在任何地方固定。
在大的迭代中,我喜欢使用中断。 只要按下Ctrl + C即可退出:
my $exitflag = 0; $SIG{INT} = sub { $exitflag=1 }; while(!$exitflag) { # Do your stuff }