closedir() attempted on invalid dirhandle

11/11/2010 - 04:57 von ram | Report spam
Ich hatte, wenn ich das alles richtig verstehe und ermittelt
habe, Perl v5.8.3 und verwende nun v5.12.1. Dies erzeugt nun
eine Fehlermeldung oder Warnung, welche, WIMRE, zuvor nicht
erschien:

closedir() attempted on invalid dirhandle DIR at [Datei und Zeilennummer]

Dort steht:

sub directory($){ my( $path )= @_; if( opendir( DIR, $path )){ my @entries = map{"$path/$_"} grep !/^(\.|\.\.)$/, readdir DIR; dodir( \@entries ); closedir DIR; }}

. Ich verstehe diese Meldung von Perl v5.12.1 leider nicht.
 

Lesen sie die antworten

#1 Wolf Behrenhoff
11/11/2010 - 10:28 | Warnen spam
On 11.11.2010 04:57, Stefan Ram wrote:
Ich hatte, wenn ich das alles richtig verstehe und ermittelt
habe, Perl v5.8.3 und verwende nun v5.12.1. Dies erzeugt nun
eine Fehlermeldung oder Warnung, welche, WIMRE, zuvor nicht
erschien:

closedir() attempted on invalid dirhandle DIR at [Datei und Zeilennummer]

Dort steht:

sub directory($){ my( $path )= @_; if( opendir( DIR, $path )){ my @entries = map{"$path/$_"} grep !/^(\.|\.\.)$/, readdir DIR; dodir( \@entries ); closedir DIR; }}

. Ich verstehe diese Meldung von Perl v5.12.1 leider nicht.




Hallo Stefan,

das bedeutet, dass DIR kein gültiges Handle mehr ist. Die spannende
Frage hier ist, was denn die Funktion dodir tut. Hast du vielleicht
irgendwo anders noch DIR benutzt und geschlossen? Wenn ja, sollte es
vermutlich helfen, das closedir vor den Aufruf von dodir zu setzen.

Um diese Probleme zu vermeiden, benutzt du besser keine globalen Datei-
und/oder Directoryhandles, sondern welche, die nur im lokalen Scope
gültig sind!

Besser:
sub directory {
my ($path) = @_;
if (opendir(my $DIR, $path)) { ... } #beachte das $ vor dem Handle!
}

Gruß, Wolf

Ähnliche fragen