use Benchmark qw/:all/;
my $folder = "C:\\Perl";
sub iterative {
opendir $DIR, '.';
my $file;
while ($file = readdir $DIR) {
$file = "$folder\\$file";
next unless -f $file;
my @s = stat $file;
}
closedir $DIR; # I like being explicit;
}
sub slurpy {
opendir $DIR, '.';
my @files = map { "$folder\\$_" } grep { -f $_ } readdir($DIR);
foreach (@files) {
my @s = stat $_;
}
closedir $DIR;
}
cmpthese ( 200, {
'iterative' => \&iterative,
'slurpy' => \&slurpy,
});
__END__
Rate slurpy iterative
slurpy 74.4/s -- -44%
iterative 133/s 79% --
####
C:\>perl -v
This is perl, v5.8.6 built for MSWin32-x86-multi-thread
(with 3 registered patches, see perl -V for more detail)
##
##
Rate slurpy iterative
slurpy 1264/s -- -17%
iterative 1517/s 20% --
##
##
$ perl -v
This is perl, v5.8.6 built for darwin-thread-multi-2level
(with 2 registered patches, see perl -V for more detail)