@matches = ($input =~ m/ (.{1}?) (?{ $chars{$^N}++; }) /xg); #### map {$wordCharCount{$_}++} (split(//,$word)); #### use strict; use warnings; use Data::Dumper; my $word='perlmonks'; my %wordCharCount; my @matches; my $input; my %chars; my $boolean=1; my $k; map {$wordCharCount{$_}++} (split(//,$word)); while (<>) { $input = $_; if (/^[$word]*$/) { #print "candidate: $_"; @matches = ($input =~ m/ (.{1}?) (?{ $chars{$^N}++; }) /xg); foreach $k (keys %chars) { $boolean = ($wordCharCount{$k} >= $chars{$k}?1:0) && $boolean; # print "$wordCharCount{$k} <=> $chars{$k} yields $boolean\n"; } print if $boolean; #print "hit: $_" if $boolean; undef %chars; $boolean=1; } } #### C:\chas_sandbox>lbu.pl WORDS.KNU e el elk elks elm elms els em en enol eon eons k kelp ken keno kern kerns l lemon lemons lens les lo lone loner loners lop lope loper lops lore lorn lose loser me melon melons men mens mer meson ml mole moles monel moner monk monks mop mope moper mopes mops more morel mores morn morsel n ne neo no noes nope nor norm norms nose o om omen omens omer on one ones ons op open opens or ore ores ors pel pels pen pens peon per perk perm person peso poem poems poke poker pokes pol pole poles pome pon pons pore pores pork porn pose poser pre pro prole prom prone pros prose r re rep reps roe roes role roles romp romps rope ropes rose s sen senor ser sermon skelp skep sloe slop slope sloper smoke smoker snore snorkel so soke sole solemn soln some son sone sop sore sperm splore spoke spoken spore