opi: while und foreach Schleifen

Hallo zusammen,

ich habe da mal eine grundsätzliche Frage den o.g. Schleifen.

Gibt es einen bestimmten Grund, weshalb while-Schleifen vorwiegend
für Filehandles und foreach-Schleifen für Arrays und Hashes (keys)
genutzt werden?

Ich habe auch es auch schon andersrum gesehen, aber meisten in
dieser Konstelation.

Hat das einen bestimmten Grund?

Greez,
opi

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

    Gibt es einen bestimmten Grund, weshalb while-Schleifen vorwiegend
    für Filehandles und foreach-Schleifen für Arrays und Hashes (keys)
    genutzt werden?

    Ja, while-Schleifen durchlaufen eine Liste bis zum Erreichen der Abbruchbedingung. Das ist sinnvoll, wenn man entweder nicht weiß, welchen Umfang die zu durchlaufende Liste hat oder die zu durchlaufende Liste noch nicht gespeichert ist. Im Gegensatz dazu ist für die Anwendung von foreach eine existente Liste Voraussetzung. Bei Hashes beispielsweise kommt es darauf an, was du erreichen willst, denn generell hast du mit foreach eine bessere Kontrolle und kannst u.a. die keys alphabetisch sortieren:

    foreach $schluessel (sort keys %werteliste) {  
      print "$wert ist $werteliste{$wert}";  
    }
    

    Zu beachten ist, dass vor Ausführen der Schleife eine Liste der Schlüssel generiert wird, die natürlich Speicher kostet. Das kann bei großen Listen ein Nachteil sein. Weiterhin können Modifikationen innerhalb einer foreach-Schleife wegen der vor Ausführung erzeugten Schlüsselliste in die Hose gehen. Deshalb geht es auch so:

    while (($schluessel, $wert) = each(%werteliste)) {  
      print "$schluessel ist $wert";  
    }
    

    Die vorkonstruierte Liste ist auch der Grund, warum du beim Zugriff auf Filehandles keine foreach-Schleife verwenden kannst.

    Siechfred

    1. Hallo Siechfred,

      das * wusste ich noch nicht!

      Ich habe ein wenig rum gegoogelt und leider nicht passendes
      gefunden!

      Super! Danke!

      Eine andere Frage...

      kannst du hier mal vorbei schauen

      https://forum.selfhtml.org/?t=116046&m=742044

      und mir ein Stück weiterhelfen?

      Greez,
      opi

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