my %replacements = (...); my $regex = join '|', map {quotemeta} sort { length $b <=> length $a } keys %replacements; $regex = qr/$regex/; # ... while ( <$readFile> ) { s/($regex)/$replacements{$1}/g; print $_; }