Hallo Cheatah,
Ich tippe mal darauf, daß Du $#array mißverstanden hast. Dadurch erfährst Du _nicht_ die Anzahl der Elemente in einem Array, sondern nur einen Zeiger auf das letzte Element! Je nach Umgebung kann das auch 42 ergeben, obwohl das Array leer ist.
Dann habe ich es wohl auch Missverstanden, obwohl ich dachte es ausreichend genau gelesen zu haben ;-)
Also laut "Programmieren mit Perl" (deutsche Ausgabe) liefert $#array den Index des letzten Elementes von @array zurück. $#array ist um 1 kleiner als scalar(@array) weshalb scalar(@array) == $#array + 1 immer true sein soll. Zuweisungen an $#array verändert die Länge von @array, wobei bei einer Verkürzung mit anschließender Verlängerung die abgeschnittenen Elemente, entgegen früherer Versionen von Perl, nicht wieder hergestellt werden.
Die Dokumentation von ActivePerl schlägt imho in etwa in dieselbe Kerbe:
===cut===
The length of an array is a scalar value. You may find the length of array @days by
evaluating $#days, as in csh. Technically speaking, this isn't the length of the array; it's
the subscript of the last element, since there is ordinarily a 0th element. Assigning to
$#days actually changes the length of the array. Shortening an array this way destroys
intervening values. Lengthening an array that was previously shortened does not recover
values that were in those elements. (It used to do so in Perl 4, but we had to break this to
make sure destructors were called when expected.)
===cut===
You can truncate an array down to nothing by assigning the null list () to
it. The following are equivalent:
@whatever = ();
$#whatever = -1;
===cut===
So in general you can assume that
scalar(@whatever) == $#whatever + 1;
===cut===
$#days # the last index of array @days
Hoffentlich ist meine Beweisführung nicht löcherig, aber demnach müsste shift(@array) $#array um 1 erniedrigen, wie es im Skript von Markus imho auch das erwartete Verhalten ist.
Vielleicht kannst Du ja das nochmal genauer aufklären, aber ich habe mich bis jetzt an das oben Zitierte gehalten, und bin damit wunderbar gefahren (vielleicht hatte ich ja bis jetzt auch nur Glück :-)
Gruß AlexBausW
Please visit my SELFvisitingcard @ http://www.atomic-eggs.com/selfspezial/daten/150.html