my %num_letters = ( a => 1, e => 2, g => 1, i => 1, n => 1, r => 1, t => 2, ); my $charclass = join "", keys %num_letters; my $num_chars = 0; $num_chars += $num_letters{$_} foreach keys %num_letters; open DICT, ") { my %letters = %num_letters; chomp $word; next WORD unless $word =~ /^[$char_class]{$num_chars}$/; while (my $letter = chop($word)) { $letters{$letter}--; } foreach my $letter (keys %letters) { next WORD if ($letters{$letter} != 0); } print "Found $word\n"; } close DICT;