use strict; use warnings; my @result = ('thew', 'trow', 'whew '); my %masterLetterFreq = ('w' => 1, 'h' => 1, 't' => 1, 'o' => 1, 'r' => 2, 'e' => 1); for my $word (@result) { my %seen; $seen{$_}++ for split //, lc $word; next if grep {$seen{$_} > $masterLetterFreq{$_}} keys %seen; print "$word\n"; next; }