opi: Unterschied zwischen for und foreach

Beitrag lesen

Hallo Vinzenz,

Laut dem Kamelbuch (Programmieren mit Perl, Larry Wall, Tom Christiansen & Randal Schwartz, O'Reilly-Verlag) erwartet die for-Schleife drei Ausdrücke innerhalb der Klammern der Schleife: Einen Ausdruck, der den Anfangszustand der Schleifenvariable bestimmt, eine Bedingung, die die Schleifenvariable prüft, und einen Ausdruck, der den Zustand der Schleifenvariable verändert. [...]

ach ja? Dann schlag mal im Buch Seite 293 (2. Auflage) auf...

"Zugriff und Ausgabe bei Hashes von Hashes"

for $familiy ( sort keys %HoH ) {
   ...
}

for $family ( sort { keys %{$HoH{$a}} <=> keys %{$HoH{$b}} } keys %HoH ) {
   ...
}

Soviel zu "erwartet die for-Schleife drei Ausdrücke innerhalb der Klammern" :-))

foreach wird genutzt, um den gleichen Code für jedes Element einer bekannten Menge von Skalaren, etwa eines Arrays, auszuführen ...
Bei jeder foreach-Anweisung wird der in Klammern stehende Ausdruck so evaluiert, dass er eine Liste erzeugt. Dann wird die Schleifenvariable nacheinander zu einem Synonym für jedes Element der Liste gemacht, und der Codeblock wird für jedes Element einmal ausgeführt...

genau dieses tolle Buch habe ich auch vor mir liegen und eine
Antwort auf meine Frage gesucht zwischen Seite 32 und 36 gesucht. :-)

Eine Konstruktion, die Ihnen häufig begenen wird, ist die Schleife über die sortierten Schlüssel eines Hashes:

foreach $key (sort keys %hash) {

...

Jetzt etwas klarer? Dein seltsames foreach-Beispiel verstehe ich überhaupt nicht. Wer wird so etwas wollen? Das ist eine Vergewaltigung von foreach.

Das war ja auch nicht meine Frage.

Greez,
opi

--
Selfcode: ie:( fl:( br:^ va:) ls:] fo:) rl:( n4:? ss:| de:] ch:? mo:|