Der Befehl undef entfernt Werte aus Hashes, Arrays und setzt Skalare auf undef.
Dabei bleibt bei Hashes und Arrays das Element selbst erhalten, es wird jedoch in den Zustand undef versetzt.
Dem Array @array wird das Element 5 auf undef gesetzt. Danach werden per foreach-Schleife alle definierten Elemente ausgegeben.
Übrigens undef "löscht" Elemente nur scheinbar in Arrays und Hashes, tatsächlich bleiben die ge-undef-ten Elemente aber erhalten, aber halt eben als undefiniert.
Eine "echte" Löschung bei Arrays erfolgt nur per shift, splice und pop, bei Hashes können einzelne Elemente mit delete gelöscht werden.