http://qs1969.pair.com?node_id=1212211


in reply to Is there any way to ignore certain words and keep it as it is when substituing hash values to a matched pattern in a string?

Appropriating from ideas of several other postings including the OP, tybalt89's example, haukex' s use of \b, and a hopefully plausible approach to Corion's concern about case sensitivity, perhaps the following is simple but still adequate. Lower casing the "cat" may or may not be the exact right approach to being case insensitive.

use strict; use warnings; my %cats = ( blackcat=>5, whitecat=>10,orangecat=>20 ); my $texttosub = 'log10(blackcat)*whitecat*(log10(orangeCat))'; $texttosub =~ s/\b(?!log10)([a-zA-Z][A-Za-z_0-9]+)\b/$cats{lc $1}/ige; print "$texttosub\n";

Output

log10(5)*10*(log10(20))
Ron