loopsperlbreakcontrol-flow

How do I break an outer loop from an inner one in Perl?


Suppose I have a piece of Perl code like:

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
}

If something() is true, I would like to break ('last') all the loops.

how can I do that? I thought of two options, both of which I don't like: Using something GOTO Adding a boolean variable which will mark something() is true, check this var in each of the loops before they resume and last() if it's true.

Any suggestions or thoughts?

Thanks.


Solution

  • Use a label:

    OUTER:
    foreach my $x (@x) {
     foreach my $y (@z) {
      foreach my $z (@z) {
       if (something()) {
        last OUTER;
       }
       # do stuff 
      }
      # do stuff
     }
     # do stuff
    }