$search = 'while (<>) { study;'; foreach $word (@words) { $search .= "++\$seen{\$ARGV} if /\b$word\b/;\n"; } $search .= "}"; @ARGV = @files; undef $/; # slurp each entire file eval $search; # this screams $/ = "\n"; # put back to normal input delim foreach $file (sort keys(%seen)) { print $file, "\n"; }