Как мне разорвать внешний цикл от внутреннего в Perl? - PullRequest
20 голосов
/ 14 сентября 2010

Предположим, у меня есть фрагмент кода на 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(), имеет значение true, проверьте эту переменную в каждом из циклов, прежде чем они возобновятся, и last(), если это правда.

Есть предложения или мысли?

Спасибо.

Ответы [ 2 ]

38 голосов
/ 14 сентября 2010

Используйте метку:

OUTER:
foreach my $x (@x) {
 foreach my $y (@z) {
  foreach my $z (@z) {
   if (something()) {
    last OUTER;
   }
   # do stuff 
  }
  # do stuff
 }
 # do stuff
}
14 голосов
/ 14 сентября 2010

Синтаксис «последней метки» описан в документации .

...