- In Zeile 2 benutzt du eine globale Variable $ordner, bevor du in Zeile 5 eine lokale Variable $ordner deklarierst und zuweist. Das kann so nicht funktionieren, vor allem nicht rekursiv. Setze Zeile 5 nach vorne.
- Die Anführungszeichen um "$datei" in Zeile 8 sind überflüssig.
- Die Zeilen 11 bis 14 werden nie ausgeführt, da du vorher ein next machst.
- Der else-Block in den Zeilen 15 bis 19 wird immer aufgerufen, wenn ein Eintrag nicht "." oder ".." heißt, also auch für Links und Verzeichnisse. Das gibt Warnungen.
- Die Zeilen 24 bis 27 werden nie ausgeführt, weil du in Zeile 23 ein return machst.
Vielleicht solltest du dein großes
if mit ein paar
elsif aufpeppen.