如何在Perl中打破循环?

Zai*_*zvi 291 perl loops strict break

我试图breakfor循环中使用一个语句,但由于我在Perl代码中也使用严格的subs,我收到一个错误说:

在./final.pl第154行使用"严格潜艇"时不允许使用Bareword"break".

有没有解决方法(除了禁用严格的潜艇)?

我的代码格式如下:

for my $entry (@array){
    if ($string eq "text"){
         break;
    }
}
Run Code Online (Sandbox Code Playgroud)

Zai*_*zvi 429

哦,我找到了.你使用last而不是break

for my $entry (@array){
    if ($string eq "text"){
         last;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 出于某种原因,我完全无法记住这个关键字'last'.总是谷歌搜索'perl break loop':( (21认同)

Ken*_*ric 174

其他数据(如果您有更多问题):

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

                    last FOO;  # --->
                                   # |
                 }                 # |
          }                        # |
       }                           # |
 } # <-------------------------------
Run Code Online (Sandbox Code Playgroud)

  • 如果你还想要跳过我的$ i循环之后你有其他代码,你会这样做.外部{}是一个裸块,它本身就是一个有趣的循环,可以是last/redo/next'd. (13认同)
  • 在FOO之后你实际上不需要括号: (2认同)

Kam*_*yan 18

只需last在这里工作:

for my $entry (@array){
    if ($string eq "text"){
         last;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果你有嵌套循环,那么last将从最里面退出.在这种情况下使用标签:

LBL_SCORE: {
       for my $entry1 ( @array1 ){
          for my $entry2 ( @array2 ){
                 if ( $entry1 eq $entry2 ){   # or any condition
                    last LBL_SCORE;
                 }
          }
       }
 }
Run Code Online (Sandbox Code Playgroud)

给定last语句将使编译器从两个循环中出来.可以在任意数量的循环中完成相同的操作,并且标签可以在任何地方固定.


Mor*_*enB 5

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

my $exitflag = 0;
$SIG{INT} = sub { $exitflag=1 };

while(!$exitflag) {
    # Do your stuff
}
Run Code Online (Sandbox Code Playgroud)