Я хочу, чтобы @list содержал все имена файлов в $ root_dir, которые соответствуют * ГГГГММДД *, где ГГГГММДД - 25 часов назад.
Я пытаюсь ...
my ($y, $m, $d) = (localtime(time - 25 * 60 * 60))[5,4,3];
my $pattern = sprintf('*%4d%02d%02d*',$y+1900,$m+1,$d);
print "The pattern is $pattern\n";
my @files = <$pattern>;
foreach (@files) {
print "$_\n";
}
... но вместо получения списка файлов я получаю readline () для неоткрытого дескриптора файла .
Я знаю, что оператор <> может интерпретировать переменные, поэтому <$ y $ m $ d> будет работать в течение двух третей дней в течение последних трех месяцев года, потому что это будут месяцы и дни, имеющие две цифры , но это не надежно.
Должен ли я написать ...
$m = sprintf('%02d',$m+1);
$d = sprintf('%02d',$d+1);
my @files = <*$y$m$d*>;
... или есть что-то более краткое? Что-то вроде ...
# invalid code unless you want to produce the string "readline() on unopened filehandle" for some reason
my @files = <sprintf('*%4d%02d%02d*',$y+1900,$m+1,$d)>;