Как мне выйти из цикла в Perl? - PullRequest
277 голосов
/ 19 ноября 2008

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

Bareword "break" не допускается, пока "строгие сабы" используются на ./final.pl строка 154.

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

Мой код отформатирован следующим образом:

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

Ответы [ 4 ]

411 голосов
/ 19 ноября 2008

О, я нашел это. Вы используете последний вместо перерыв

for my $entry (@array){
    if ($string eq "text"){
         last;
    }
}
171 голосов
/ 19 ноября 2008

Дополнительные данные (если у вас есть дополнительные вопросы):

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

                    last FOO;  # --->
                                   # |
                 }                 # |
          }                        # |
       }                           # |
 } # <-------------------------------
17 голосов
/ 09 мая 2017

Просто 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, компилятор выйдет из обоих циклов. То же самое можно сделать в любом количестве циклов, а метки можно фиксировать в любом месте.

4 голосов
/ 15 сентября 2015

На большой итерации мне нравится использовать прерывания. Просто нажмите Ctrl + C , чтобы выйти:

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

while(!$exitflag) {
    # Do your stuff
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...