sortiert das Verzeichnis, in das Alter von jeder Datei nach, mit dem -M
Dateitestoperator. Die zuletzt geänderte Datei ist dann die erste in der Liste
Dieses Programm zeigt das Prinzip. Es findet die neueste Datei im aktuellen Arbeitsverzeichnis, druckt seinen Namen und öffnet es zur Eingabe
Wenn Sie dies für ein anderes Verzeichnis als das cwd tun möchten, dann ist es wahrscheinlich am einfachsten, nur chdir
zu verwenden und diesen Code zu verwenden als zu opendir
ein bestimmtes Verzeichnis zu versuchen, wie dann werden Sie den vollständigen Pfad zu jeder Datei erstellen müssen, bevor Sie -M
use strict;
use warnings 'all';
use feature 'say';
my $newest_file = do {
opendir my $dh, '.' or die $!;
my @by_age = sort { -M $a <=> -M $b } grep -f, readdir $dh;
$by_age[0];
};
say $newest_file;
open my $fh, '<', $newest_file or die qq{Unable to open "$newest_file" for input: $!};
Wenn Sie arbeiten mit einem umfangreichen Verzeichnis kann als einige Zeit, dann nehmen kann dies stat
Betrieb ist ziemlich langsam. Sie können durch die Verwendung eines dieser viel verbessern Schwartzian Transformation, so dass stat
nur einmal für jede Datei aufgerufen wird
my $newest_file = do {
opendir my $dh, '.' or die $!;
my @by_age = map $_->[0],
sort { $a->[1] <=> $b->[1] }
map [ $_, -M ], readdir $dh;
$by_age[0];
};
Wenn Sie etwas wollen wirklich schnell, dann nur einen einzigen Durchlauf der Dateien, Aufbewahrung Spur der neuesten bisher gefundenen. So funktioniert
my $newest_file = do {
opendir my $dh, '.' or die $!;
my ($best_file, $best_age);
while (readdir $dh) {
next unless -f;
my $age = -M _;
unless (defined $best_age and $best_age < $age) {
$best_age = $age;
$best_file = $_;
}
}
$best_file;
};
mit diesem Skript sehe ich die letzte SMS, dann habe ich aber nicht den Inhalt dieser SMS erhalten. Danke – perlfg
@perlfg: Müssen Sie gesagt werden, wie man eine Akte öffnet und sie druckt? – Borodin
nein :) Ich bekomme ständig SMS und würde den Inhalt der letzten SMS mit Perl wiedergeben – perlfg