my $word = 'bantha fodder'; my @letters = split//, lc($word); my %counts; for(@letters){ $counts{$_}++; } for(sort {$counts{$b} <=> $counts{$a}} keys %counts){ my $t = $_ =~ /[a-z]/ ? 'letter' : $_ =~ /[0-9]/ ? 'number' : 'character'; my $s = $counts{$_} > 1 ? 's' : ''; printf " the %-10s: %-3s ocurred %-3s time%s\n", $t,$_,$counts{$_},$s }