Это очень похоже на то, что вы получаете от readdir .
use strict;
use warnings;
open my $dh, $dirpath or die "Failed to open $dirpath: $!";
foreach my $file (readdir $dh) {
next if $file eq '.' or $file eq '..';
print "$dirpath/$file: $file\n";
}
My Dir :: ls делает это немного аккуратнее, но оно разработано более эмулировать ls
, чем быть полезным для программирования.
use strict;
use warnings;
use Dir::ls;
foreach my $file (ls $dirpath) {
print "$dirpath/$file: $file\n";
}
Path :: Tiny упрощает общий случай как обычно - все пути являются объектами Path :: Tiny.
use strict;
use warnings;
use Path::Tiny;
foreach my $filepath (path($dirpath)->children) {
my $file = $filepath->basename;
print "$filepath: $file\n";
}
И он может фильтровать по регулярному выражению (применяется к базовому имени, а не к полному пути):
path($dirpath)->children(qr/\.txt$/);