26 votes

Comment casser une boucle extérieure à partir d'une boucle intérieure en Perl ?

Supposons que j'ai un morceau de code Perl comme :

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
}

Si something() est vrai, je voudrais casser ('last') toutes les boucles.

comment puis-je faire ça ? J'ai pensé à deux options, qui ne me plaisent pas toutes les deux : Utiliser quelque chose GOTO Ajout d'une variable booléenne qui marquera something() est vrai, vérifiez cette var dans chacune des boucles avant leur reprise et last() si c'est vrai.

Des suggestions ou des réflexions ?

Merci.

48voto

Wooble Points 35620

Utilisez une étiquette :

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

16voto

Dave Cross Points 17363

La syntaxe de la "dernière étiquette" est décrite comme suit dans la documentation .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X