use strict;
use warnings;
use File::Find;
use Benchmark qw { cmpthese };
my %files = ();
my $rcWanted = sub
{
$files{ $File::Find::name } =
( lstat $File::Find::name )[ 9 ];
};
find( $rcWanted, q{/usr/bin} );
cmpthese(
-5,
{
Direct => sub { my $raSorted = useDirect() },
ST => sub { my $raSorted = useST() },
}
);
sub useDirect
{
my @sorted =
sort { $files{ $b } <=> $files{ $a } }
keys %files;
return \ @sorted;
}
sub useST
{
my @sorted =
map { $_->[ 0 ] }
sort { $b->[ 1 ] <=> $a->[ 1 ] }
map { [ $_, $files{ $_ } ] }
keys %files;
return \ @sorted;
}
####
Rate ST Direct
ST 35.8/s -- -37%
Direct 56.9/s 59% --
####
use strict;
use warnings;
use File::Find;
use Benchmark qw { cmpthese };
my @files = ();
my $rcWanted = sub
{
push @files, $File::Find::name;
};
find( $rcWanted, q{/usr/bin} );
cmpthese(
-5,
{
Direct => sub { my $raSorted = useDirect() },
ST => sub { my $raSorted = useST() },
}
);
sub useDirect
{
my @sorted =
sort { lstat( $b ) <=> lstat( $a ) }
@files;
return \ @sorted;
}
sub useST
{
my @sorted =
map { $_->[ 0 ] }
sort { $b->[ 1 ] <=> $a->[ 1 ] }
map { [ $_, lstat( $_ ) ] }
@files;
return \ @sorted;
}
####
Rate Direct ST
Direct 1.29/s -- -46%
ST 2.38/s 85% --