Ich möchte, dass @list alle Dateinamen in $ root_dir enthält, die übereinstimmen * YYYYMMDD *, wo YYYYMMDD vor 25 Stunden ist.Gibt es in Perl eine knappe Möglichkeit, glob und printf zu kombinieren?
Ich versuche ...
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";
}
... sondern eine Liste von Dateien zu bekommen, erhalte ich Readline-() auf ungeöffnete Dateihandle.
Ich weiß, dass der < > Operator Variablen interpretieren kann, so < $ y $ m $ d > während zwei Drittel der Tage in den letzten drei Monaten des Jahres arbeiten würde, weil diejenigen, würden Monate und Tage, die zwei haben Ziffern, aber das ist nicht robust.
Muss ich schreiben müssen ...
$m = sprintf('%02d',$m+1);
$d = sprintf('%02d',$d+1);
my @files = <*$y$m$d*>;
... oder gibt es etwas prägnanter? So etwas wie ...
# 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)>;
meine @files = <$ {\ sprintf ('*% d% 02d% 02d *', $ y + 1900, $ m + 1, $ d)}>; – MkV
oder <@ {[sprintf ('*% d% 02d% 02d *', $ y + 1900, $ m + 1, $ d)]}> – MkV