Artikel im Internet unter http://www.hidemail.de/blog/foreach-perl.shtml.
Montag, 29.1.2007, 11:21:15 Uhr

foreach in Perl


foreach kann man übersetzen mit "für jedes", und damit wird auch schon klar, worum es sich handelt: Mit foreach geht man jedes Element eines Arrays nacheinander durch.

Syntax
foreach (@liste){}
oder
foreach (start..ende){}
oder
foreach my $laufvariable (@liste){}
oder
foreach my $laufvariable (start..ende){}


Beispiel:

@a=("hans","franz","paul");
foreach (@a){
print "$_ ";
}


Ausgabe: hans franz paul

Es werden also alle Elemente nacheinander durchgegangen, bis das Ende erreicht ist. So weit, so gut.


Nun zu den Besonderheiten
Im obigen Beispiel wird das $_ verwendet. Der Übersichtlichkeit wegen möchte man aber vielleicht lieber einen richtigen Namen verwenden, also zum Beispiel $eintrag.

Code:

foreach my $eintrag (@a){
print "$eintrag ";
}


Ausgabe: hans franz paul

In $eintrag ist also immer das gerade aktuelle Element gespeichert. Diese Möglichkeit der Bestimmung des gerade aktiven Elements erhöht oftmals die lesbarkeit eines Scrites, so weit ich weiß ist es aber weder schneller noch langsamer.

Durchlauf abbrechen
Falls das gesuchte Element gefunden wurde man man den restlichen Durchlauf abbrechen möchte, geht dies mit last; .

foreach my $eintrag (@a){
print "$eintrag ";
if ($eintrag eq 'franz'){last;}
}


Ausgabe:
Nur hans, da danach die Schleife verlassen wird.

Nächstes Element
Wenn man aus irgendeinem Grund mit dem aktuellen Element fertig ist und mit dem nächsten weiter machen möchte, kann man next; verwenden.

foreach my $eintrag (@a){

if ($eintrag eq 'franz'){ next; }
print "$eintrag ";

}


Ausgabe:
hans paul

Mit gleichem Element nochmal
Wenn man aus irgendeinem Grund mit dem aktuellen Element nochmal die Schleife durchlaufen will, hilft redo;

foreach my $eintrag (@a){

if ($sonstwas eq $eintrag){
redo;
}
print "$eintrag ";

}





Artikel im Internet unter http://www.hidemail.de/blog/foreach-perl.shtml.