Thread While Schleife & Filehandle Fehler (15 answers)
Opened by Trommelwirbel at 2011-11-29 15:00

pq
 2011-11-29 15:14
#154529 #154529
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
es ist schön, dass du strict und warnings benutzt.
aber zusätzlich solltest du noch checken, ob ein open() erfolgreich ist. hier ist es offenbar so, dass das readline fehlschlägt, weil eine datei nich tgeöffnet werden konnte.

statt:
open(IN,$m);

mach
open IN, "<", $m or die "Could not open $m: $!";

und du wirst sehen, dass eine datei nicht geöffnet werden konnte und warum.

und meine glaskugel sagt mir auch gleich, dass es die datei "." oder ".." sein wird, die nicht geöffnet werden konnte, denn es ist ja ein verzeichnis.

du bekommst von readdir() alle dateien eines verzeichnisses, und verzeichnisse sind auch dateien. du solltest also das ergebnis von readdir filtern auf dateien.

zweiter fehler: readdir() liefert nur den dateinamen ohne den kompletten pfad.
wenn du also ein verzeichnis /foo/bar/ ausliest und darin eine datei "boo.txt" liegt, dann liefert dir readdir() "boo.txt". du versuchst dann später, "boo.txt" zu öffnen, stattdessen solltest du aber "/foo/bar/boo.txt" öffnen.

das ganze kann man auch leicht selbst herausfinden, in dem man nur ein klein wenig neugierig ist und hier und da ein paar print-statements macht, um zu schauen, was perl genau macht.

drittens solltest du lexikalische filehandles benutzen, siehe Wiki:WasIsteinLexikalischerFileHandle

und viertens ist die einrückung des codes ziemlich merkwürdig und nicht hilfreich.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem

View full thread While Schleife & Filehandle Fehler