如果你可以使用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