Du machst den Fehler, dass Du die Werte veränderst, über die Du iterierst.Gehen wir das mal an Hand von einem Array mit 5 Elementen und XXX = 3 durch:
Nach der Initialisierung sieht das Array so aus
$array[0] = 1
$array[1] = 2
$array[2] = 3
$array[3] = 4
$array[4] = 5
Jetzt iterierst Du mit dem "foreach" über die *Werte* in dem Array und nicht über den Index.
Erster Schleifendurchlauf:
$_ = 1 (weil Wert erstes Element im Array = 1)
$array[1] = (1 - 3) . "\n";
Das Array sieht jetzt so aus:
$array[0] = 1
$array[1] = -2
$array[2] = 3
$array[3] = 4
$array[4] = 5
Zweiter Schleifendurchlauf
$_ = -2 (weil Wert zweites Element im Array = -2)
$array[-2] = (-2 - 3) . "\n";
Das Array sieht jetzt so aus:
$array[0] = 1
$array[1] = -2
$array[2] = 3
$array[3] = -5
$array[4] = 5
Dritter Schleifendurchlauf
$_ = 3
$array[3] = (3 - 3) . "\n";
Das Array sieht jetzt so aus:
$array[0] = 1
$array[1] = -2
$array[2] = 3
$array[3] = 0
$array[4] = 5
Vierter Schleifendurchlauf
$_ = 0
$array[0] = (0 - 3) . "\n";
Das Array sieht jetzt so aus:
$array[0] = -3
$array[1] = -2
$array[2] = 3
$array[3] = 0
$array[4] = 5
fünfter Schleifendurchlauf
$_ = 5
$array[5] = (5 - 3) . "\n";
Das Array sieht jetzt so aus:
$array[0] = -3
$array[1] = -2
$array[2] = 3
$array[3] = 0
$array[4] = 1
$array[5] = 2
Jetzt haben manche Elemente noch einen Zeilenumbruch, so dass eine "komische" Ausgabe kommt.
Perl macht also alles richtig...
Datum: 24.11.2009-16:50
