我通常使用类似的东西
my $dir="/path/to/dir"; opendir(DIR,$dir) or die "can't open $dir: $!"; my @files = readdir DIR; closedir DIR;
或者有时候我使用glob,但无论如何,我总是需要添加一两行来过滤掉.这是非常烦人的.
你通常如何去做这个常见的任务?
解决方法
我通常会使用glob方法:
for my $file (glob "$dir/*") { #do stuff with $file }
这样工作正常,除非目录中有很多文件.在这些情况下,您必须在while循环中切换回readdir(将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;