Thread While Schleife & Filehandle Fehler
(15 answers)
Opened by Trommelwirbel at 2011-11-29 15:00
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 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: Wie frage ich & perlintro brian's Leitfaden für jedes Perl-Problem |