Thread Code Review: Innerhalb einer for Schleife das verwendete Array verändern (5 answers)
Opened by Kuerbis at 2013-06-30 17:21

betterworld
 2013-06-30 19:07
#168679 #168679
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
In perlsyn steht bei mir:
Quote
If any part of LIST is an array, "foreach" will get very confused if you add or remove
elements within the loop body, for example with "splice". So don't do that.


Mit "LIST" ist dabei vermutlich der Teil in den runden Klammern nach "for" gemeint.

Ich dachte, ich hätte mal irgendwo gelesen, dass man am Ende ruhig auch Elemente hinzufügen darf (also "push" wie bei Dir). Ich finde das aber gerade nicht.

In Deinem Fall ist es ja noch einmal etwas anderes, weil Du ja nur über die Indices iterierst. In diesem Fall wäre es wichtig zu wissen, wann genau "$#array" als Code ausgewertet wird. Es könnte sein, dass durch irgendwelche Optimierungen die Indices auch mal als "lazy list" ausgewertet werden. Also wenn Du 100% sicher gehen willst (auch in Hinsicht auf zukünftige Perl 5er Versionen), lieber mal eine zusätzliche Variable einführen, die dann nicht mehr verändert wird:
Code: (dl )
1
2
3
my @indices_vorher = (0..$#array);
for (@indices_vorher) {
}

So wird es auch dem Leser besser klar, was Du da tust. Und wenn der Leser dann auch noch Änderungen machen möchte, ist es dann sicherlich auch robuster.
Last edited: 2013-06-30 19:11:49 +0200 (CEST)

View full thread Code Review: Innerhalb einer for Schleife das verwendete Array verändern