sub handle_section { my ($fh) = @_; my ( @entries, $line ); while ( $line = <$fh> ) { last unless $line =~ m{ ( [A-Za-z] ) # 1 first character ( [^(]+ ) # 2 anything except opening paren \s # space \( # opening paren ( \d+ ) # 3 number }x; push @entries, [ pack( 'Na*', $2, $3, $1 ), $line ]; } print map { $_->[2] } sort { $b->[0] cmp $a->[0] || $a->[1] cmp $b->[1] } @entries; return $line; }