use Sort::Maker; print make_sorter(qw/plain string substr($_,10)/)->(); __DATA__ RRsnap02 2013-07-24 12:35:35 vmk000 2013-07-22 17:16:50 vmk001 2013-07-22 20:00:36 vmk009 2013-07-23 18:21:12 vmk010 2013-07-23 18:31:00 vmk020 2013-07-23 23:30:43 vmk024 2013-07-24 03:27:30 vmk031 2013-07-24 10:27:36 vmk032 2013-07-24 11:27:38 vmk032 2013-07-24 11:27:38 #### sort { do{ my( $left, $right ) = map { substr($_,10) } $a, $b; $left cmp $right } } @_; #### return map $_->[0], sort {$a->[1] cmp $b->[1]} map [ $_, do{ my ($val) = substr($_,10) ; $val } ], @_ ;