2010-09-14 3 views
18

Предположим, у меня есть кусок кода Perl, как:Как нарушить внешний цикл из внутреннего в Perl?

foreach my $x (@x) { 
foreach my $y (@z) { 
    foreach my $z (@z) { 
    if (something()) { 
    # I want to break free! 
    } 
    # do stuff 
    } 
    # do stuff 
} 
# do stuff 
} 

something() Если это правда, я хотел бы разбить («последний») все петли.

как я могу это сделать? я подумал о двух вариантах, оба из которых мне не нравится: Использование что-то GOTO Добавление булеву переменную, которая будет маркировать something() верно, проверьте этот вар в каждой из петель, прежде чем они докачку и last(), если это правда.

Любые предложения или мысли?

Спасибо.

+7

В Perl токен комментария написан как '#', а не '//'. – daxim

ответ

36

Используйте ярлык:

OUTER: 
foreach my $x (@x) { 
foreach my $y (@z) { 
    foreach my $z (@z) { 
    if (something()) { 
    last OUTER; 
    } 
    # do stuff 
    } 
    # do stuff 
} 
# do stuff 
} 
Смежные вопросы