s/([A-Z0-9]{5,})/$seenit{$1}++/egi while <>; ## Sorted by name for (sort keys %seenit) { print "$_: $seenit{$_}\n"; } ## Sorted by freuency, then by name: for (sort {$seenit{$a} <=> $seenit{$b} or $a cmp $b} keys %seenit) { print "$_: $seenit{$_}\n"; }