sort { $a =~ /\A\w+(\d+)_(\d+).*\z/; my ($a1, $a2) = ($1, $2); $b =~ /\A\w+(\d+)_(\d+).*\z/; my ($b1, $b2) = ($1, $2); ($a1 <=> $b1) or ($a2 <=> $b2); }, @array;