Я обычно буду использовать glob
метод:
for my $file (glob "$dir/*") {
#do stuff with $file
}
Это прекрасно работает, если в каталоге нет большого количества файлов. В этих случаях вам нужно переключиться обратно на readdir
в цикле while
(поместить readdir
в контекст списка так же плохо, как и glob
):
open my $dh, $dir
or die "could not open $dir: $!";
while (my $file = readdir $dh) {
next if $file =~ /^[.]/;
#do stuff with $file
}
Часто, если я читаю кучу файлов в каталоге, я хочу прочитать их рекурсивно. В этих случаях я использую File::Find
:
use File::Find;
find sub {
return if /^[.]/;
#do stuff with $_ or $File::Find::name
}, $dir;