Hi,
Hello Me,
:-)
[...] Je nach Umgebung kann das auch 42 ergeben, obwohl das Array leer ist.
Ich vermute Cheatah meint, wenn jemand aus irgendeinem Grund $[ auf einen Wert != 0 gesetzt hat, gilt nur: scalar(@array) == $#array - $[ + 1;
Exakt das.
Aber wann und wo könnte das zutreffen, bzw. Schwierigkeiten verursachen?
Das Beispiel in perldoc perlvar bezieht sich auf Zählungen, die nicht wie in der Informatik üblich bei 0, sondern bei 1 beginnen. Denkbar ist aber auch, daß irgendjemand $[ nutzt, um (auf ziemlich kranke Weise *g*) "gezielt" auf ein bestimmtes Element im Array zuzugreifen - $[ ist im globalen Scope verfügbar, eine Zählvariable nur dort, wo sie deklariert wurde.
Aber wie heißt es in der Doku schon: "Its use is discouraged." Trotzdem, auf $#array ist im Gegensatz zu scalar @array kein Verlaß, wenn man die Zahl der Elemente haben möchte. Zu der von Dir genannten Berechnung gibt es in der Praxis jedenfalls i.d.R. keinen Grund... zumal sie ziemlich unperformant ist im Vergleich zur Alternative. Ich nehme aber an, Du hast sie eh nur zur Verdeutlichung genannt :-)
Cheatah