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% --