Die Funktion
delete ist für Elemente eines Hash gedacht - nicht für Elemente eines Array. Dazu steht in der Dokumentation
perlfunc delete:
QuoteWARNING: Calling "delete" on array values is strongly
discouraged. The notion of deleting or checking the existence of
Perl array elements is not conceptually coherent, and can lead
to surprising behavior.
Das wesentliche ist, dass
delete die Indices auf weiterhin bestehende Array-Elemente
nicht verändert. Das ist somit konsistent zum Löschen eines Hash-Wertes, da rücken die anderen Werte ja auch nicht eins auf. Wenn man tatsächlich die Elemente aus der Reihe entfernen will, dann gibt es dafür
perlfunc splice,
perlfunc splice
und
perlfunc pop.
In Perl 6 ist das klarer geregelt: Es gibt gar kein
delete auf Arrays, aber wie in Perl 5
splice.