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; ', });