$ perl -Mstrict -Mwarnings -E ' my @dates = qw{ 12112014 01052015 02202015 03102015 01012011 04092015 09092015 }; say for map { $_->[ 0 ] } sort { $a->[ 3 ] <=> $b->[ 3 ] || $a->[ 1 ] <=> $b->[ 1 ] || $a->[ 2 ] <=> $b->[ 2 ] } map { [ $_, unpack q{a2a2a4}, $_ ] } @dates;' 01012011 12112014 01052015 02202015 03102015 04092015 09092015 $ #### $ perl -Mstrict -Mwarnings -E ' my @dates = qw{ 12112014 01052015 02202015 03102015 01012011 04092015 09092015 }; say for map { substr $_, 8 } sort map { join q{}, ( unpack q{a2a2a4}, $_ )[ 2, 0, 1 ], $_ } @dates;' 01012011 12112014 01052015 02202015 03102015 04092015 09092015 $