如果你可以使用Perl 5.10的新功能,这是怎么了我会写它。
use strict;
use warnings;
use 5.10.1;
use autodie; # don't need to check the output of opendir now
my $dir = ".";
{
opendir my($dirhandle), $dir;
for(readdir $dirhandle){ # sets $_
when(-d $_){ next } # skip directories
when(/^[.]/){ next } # skip dot-files
when(/(.+)[.]txt$/){ say "text file: ", $1 }
default{
say "other file: ", $_;
}
}
# $dirhandle is automatically closed here
}
或者,如果你有非常大的目录,你可以使用一个while
循环。
{
opendir my($dirhandle), $dir;
while(my $elem = readdir $dirhandle){
given($elem){ # sets $_
when(-d $_){ next } # skip directories
when(/^[.]/){ next } # skip dot-files
when(/(.+)[.]txt$/){ say "text file: ", $1 }
default{
say "other file: ", $_;
}
}
}
}
另外考虑为你的目录句柄使用一个词法变量:'opendir my $ dirh,$ dir_path or die“无法打开dir $ dir:$!”;' – 2009-10-02 16:30:37