如何摆脱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 }