my @sorted = sort { (split /\./, $a)[1] cmp (split /\./, $b)[1] } @LogAnalyser::LogFileList; #### my @sorted = sort datestamp @LogAnalyser::LogFileList; { # anonymous block. If you're using Perl 5.10, you could # use a state variable instead. my %cache; sub datestamp { my $left = ( $cache{$a} ||= (split /\./, $a)[1] ); my $right = ( $cache{$b} ||= (split /\./, $b)[1] ); return $left cmp $right; } }