Hallo Ihr!
$array = @array;
for(my $blabla = 0; $blabla < $array; $blabla++ ) {
...
splice @array, ...
...
}slice ändert, wie jede änderung an $_ auch, direkt die globale variable.
deine $array var vorher definiert, also ändert sich nichts daran.
die länge des arrays ändert sich unmittelbar mit dem entfernen des wertes (siehe abs. 1)
$_ wird von slice (wahrscheinlich) nicht beeinflusst. du änderst schließlich @array direkt und nicht den wert des funktionsaufrufs.
eine lösung (wenn auch eine schlechte): wenn ein wert des arrays entfernt wird, ändere manuell $blabla oder $array
Wie sagte Cheatah doch weiter oben???
"warum einfach, wenn's auch kompliziert geht? :-)"
Es ist sicherlich wahr, daß sich das Array sofort verändert, wenn man mit splice drauf los geht. Aber es muß ja nicht gleich zu Problemen führen:
----------------
for(my $blabla = @array; $blabla; $blabla-- ) {
...
splice @array, ...
...
}
----------------
Wenn man also das Array von hinten bearbeitet, bekommt gar nicht mit, daß dieses gelegentlich mitschrumpft (bloß nicht nach hinten schauen ;-)
Davon abgesehen wirken natürlich die Hash-Varianten wesentlich geschickter, da man die ganzen (in dieser Splice-Variante ausgelassenen) Vergleiche gar nicht mehr hat. Ebenso entfällt bei geschickter Nutzung die for-Schleife ... hauptsache, man sieht dem Programm noch an, was es eigentlich macht! Und wenn man den Kommentar bemühen muß ;-)
Jörk