my %charhash; @letters = split(//,$p); $string = ""; $invert = ""; $count = 1; foreach $letter (@letters) { if(defined $charhash{$letter}) { $string.="(\\$charhash{$letter})"; } else { $charhash{$letter} = $count; if($invert) { $string .= "([^$invert])"; } else { $string .= "(\\w)"; } } $invert .= "\\$count"; $count++; } print "Searching for pattern /^$string\\s/\n"; open DICT, $d; while() { print if /^$string\s/i; }