Как вырваться из петли в Perl?

Я пытаюсь использовать break заявление for цикл, но так как я также использую строгие subs в моем коде Perl, я получаю сообщение об ошибке:

голое слово "перерыв" не допускается в то время как "строгие подводные лодки" в использовании at ./final.pl линии 154.

есть ли обходной путь для этого (помимо отключения строгих подмен)?

мой код имеет следующий формат:

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

4 ответов


дополнительные данные (в случае, если у вас есть больше вопросов):

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
}