Это зависит от того, что вы хотите ... если вы можете принять как должное, что имя файла всегда будет в том порядке, в котором оно было создано, тогда будет работать что-то вроде этого:
my @files = <'/mnt/SESSIONS*'>;
my $latest;
foreach my $file (@files) {
$latest = $file if $file gt $latest;
}
print $latest;
Или,если вы хотите перейти на основе того, когда последний файл был изменен (игнорируя имена файлов), вы можете сделать это:
my @files = <'/mnt/SESSIONS*'>;
my @latest = (undef, undef);
foreach my $file (@files) {
my $mod = -M $file;
if (!$latest[1] or $mod < $latest[1]) {
@latest = ($file, $mod);
}
}
print $latest[0];
Ничего против сортировки, но сортировка - средний случай O (n log n),тогда как этот подход - O (n) и гарантирует только один обход всех файлов.Конечно, количество файлов в каталоге вряд ли будет настолько большим, что повлияет на производительность, но это соображение.
В качестве альтернативы, если вы просто хотите сделать системный вызов, вы можете сделать это:
ls -A1t /mnt/SESSIONS* | head -1