my @sorted =
map substr($_, 19),
sort
map substr($_, -(19+20), 19) . $_,
@LogAnalyser::LogFileList;
####
Rate memoized st naive grt
memoized 12517/s -- -30% -64% -66%
st 17883/s 43% -- -48% -52%
naive 34555/s 176% 93% -- -6%
grt 36872/s 195% 106% 7% --
####
use strict;
use warnings;
use Benchmark qw( cmpthese );
my %cache;
sub memoized {
my $left = ( $cache{$a} ||= substr($a, -(19+20), 19) );
my $right = ( $cache{$b} ||= substr($b, -(19+20), 19) );
return $left cmp $right;
}
@::LogFileList if 0;
@::LogFileList = qw(
/devLog/devid234/term_logs/devid234.2009-08-27-23-55-11.terminal.log.tar.gz
/devLog/devid234/term_logs/devid234.2009-08-27-15-05-06.terminal.log.tar.gz
/devLog/devid234/term_logs/devid234.2009-08-27-01-45-03.terminal.log.tar.gz
/devLog/devid234/term_logs/devid234.2009-08-28-00-00-01.terminal.log.tar.gz
/devLog/devid234/term_logs/devid234.2009-08-28-18-25-04.terminal.log.tar.gz
/devLog/devid168/term_logs/devid168.2009-08-28-01-35-02.terminal.log.tar.gz
/devLog/devid168/term_logs/devid168.2009-08-27-04-02-01.terminal.log.tar.gz
/devLog/devid168/term_logs/devid168.2009-08-28-20-25-01.terminal.log.tar.gz
/devLog/devid168/term_logs/devid168.2009-08-27-17-55-01.terminal.log.tar.gz
/devLog/devid918/term_logs/devid918.2009-08-27-21-15-01.terminal.log.tar.gz
/devLog/devid918/term_logs/devid918.2009-08-27-13-25-01.terminal.log.tar.gz
/devLog/devid918/term_logs/devid918.2009-08-27-00-00-01.terminal.log.tar.gz
/devLog/devid918/term_logs/devid918.2009-08-28-00-00-02.terminal.log.tar.gz
/devLog/devid918/term_logs/devid918.2009-08-28-09-45-01.terminal.log.tar.gz
/devLog/devid918/term_logs/devid918.2009-08-28-19-25-01.terminal.log.tar.gz
/devLog/devid167/term_logs/devid167.2009-08-28-02-45-01.terminal.log.tar.gz
/devLog/devid167/term_logs/devid167.2009-08-27-01-45-02.terminal.log.tar.gz
/devLog/devid167/term_logs/devid167.2009-08-27-10-55-01.terminal.log.tar.gz
);
cmpthese(-3, {
naive => '
use strict; use warnings;
my @sorted =
sort {
substr($a, -(19+20), 19)
cmp
substr($b, -(19+20), 19)
}
@::LogFileList;
',
memoized => '
use strict; use warnings;
my @sorted = sort memoized @::LogFileList;
',
st => '
use strict; use warnings;
my @sorted =
map $_->[0],
sort { $a->[1] cmp $b->[1] }
map [ $_, substr($_, -(19+20), 19) ],
@::LogFileList;
',
grt => '
use strict; use warnings;
my @sorted =
map substr($_, 19),
sort
map substr($_, -(19+20), 19) . $_,
@::LogFileList;
',
});