last unless $line =~ m{ ( [^(]+ ) # 1 anything except opening paren \s # space \( # opening paren ( \d+ ) # 2 number }x; push @entries, [ $2, $1, $line ]; ... print map { $_->[2] } sort { $a->[0] <=> $b->[0] # sort by $2 || # or if equal $a->[1] cmp $b->[1] # sort by $1 } @entries;