my @unsorted = ('-6h0m','+11h39m','+1h7m','-12h8m'); my @sorted = map {$_->[0]} sort {$b->[1] <=> $a->[1]} map { /^([+-])(\d+)h(\d+)m$/; [$_, sprintf("%s%d",$1, $2*60+$3) ] } @unsorted; print join ', ', @sorted;