Es gibt mindestens 2 Probleme mit diesem Code. Hier ist eine bessere Version:
use strict;
use warnings; # I bet you weren't using this, because it produced a lot
sub get_sorted_files {
my $path = shift;
opendir my($dir), $path or die "can't opendir $path: $!";
my %hash = map {$_ => (stat($_))[9] || undef} # avoid empty list
map { "$path$_" }
readdir $dir;
closedir $dir;
return %hash;
}
my %files = get_sorted_files("./");
foreach my $key (sort{$files{$a} <=> $files{$b}} keys %files) {
print "$key\t", scalar localtime($files{$key}), "\n";
}
Zuerst Sie $dir
im ursprünglichen Code zu $path
umbenannt, sie aber nicht in der map
Linie ändern. Ihr $dir
ist ein Verzeichnishandle; Von dort kommt der GLOB (0x ...).
Zweitens, alle Änderungsdaten lesen "Wed Dec 31 16:00:00 1969", weil Sie einen schlechten Pfadnamen an stat
übergeben haben. (stat($_))[9]
gab eine leere Liste zurück (weil Sie nach einer Datei wie GLOB(0x3f9b38)status.txt
anstelle des korrekten Pfadnamens gesucht hatten) und so wurde der Hash tatsächlich mit Dateinamen als Schlüssel und Werten aufgefüllt. Der erste Dateiname war ein Schlüssel, der zweite war sein Wert, der dritte war der nächste Schlüssel und so weiter. localtime
konvertiert den Dateinamen in eine Zahl (0) und konvertiert die Epochzeit 0 (1-Jan-1970 0:00:00 UTC) in Ihre Zeitzone.
Drittens erwartet $path
mit einem Verzeichnistrennzeichen zu beenden, und Sie bestanden "."
. Sie müssen "./"
übergeben, oder noch besser, reparieren Sie es, so dass die Funktion bei Bedarf ein Trennzeichen anhängt.
Viertens, die grep
hat nichts mehr getan und sollte entfernt werden. (Im ursprünglichen Code wurden nur bestimmte Dateinamen ausgewählt, aber das Muster wurde so geändert, dass es mit allem übereinstimmte.)
Zum Sortieren von Dateinamen: get_sorted_files
gibt eine Liste mit Pfadnamen und Änderungszeiten zurück, die Sie in der Datei speichern %files
Hash. keys %files
gibt die Liste der Schlüssel (die Dateinamen) zurück und sortiert sie durch einen numerischen Vergleich des zugehörigen Wertes (der Änderungszeit).
Danke Mob! Mein Schlechter konnte es früher nicht fangen! – rkg