322 votes

Comment sortir d'une boucle en Perl ?

J'essaie d'utiliser un break dans un for mais comme j'utilise également des subs stricts dans mon code Perl, j'obtiens une erreur disant :

Le mot "break" n'est pas autorisé lorsque alors que "strict subs" est utilisé à ./final.pl ligne 154.

Existe-t-il un moyen de contourner ce problème (à part la désactivation des subs stricts) ?

Mon code est formaté comme suit :

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

24 votes

Et si vous n'aviez pas activé l'option "strict subs", vous auriez obtenu une erreur d'exécution lorsque le système n'a pas pu trouver un sous-domaine nommé "break".

3voto

Timur Shtatland Points 7599

Pour les expressions en Perl avec boucles implicites (en utilisant -n o -p options de ligne de commande), utilisez last o last LINE pour sortir de la boucle qui itère sur les enregistrements d'entrée. Par exemple, ces exemples simples impriment tous les 2 premières lignes de l'entrée :

echo 1 2 3 4 | xargs -n1 | perl -ne 'last if $. == 3; print;'
echo 1 2 3 4 | xargs -n1 | perl -ne 'last LINE if $. == 3; print;'
echo 1 2 3 4 | xargs -n1 | perl -pe 'last if $. == 3;'
echo 1 2 3 4 | xargs -n1 | perl -pe 'last LINE if $. == 3;'

Tous les imprimés :

1
2

Les perl one-liners utilisent ces drapeaux de ligne de commande :
-e : indique à Perl de chercher le code en ligne, au lieu de le chercher dans un fichier.
-n : boucle sur l'entrée une ligne à la fois, l'assignant à $_ par défaut.
-p : même chose que -n , ajoutez également print après chaque itération de la boucle sur l'entrée.

VOIR AUSSI :

last docs
last , next , redo , continue - un exemple illustré
perlrun : documentation sur les commutateurs de ligne de commande


Autres exemples de last en Perl one-liners :

Cassez une ligne de commande script après la première correspondance.
Imprimer les N premières lignes d'un grand fichier

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