Ah, beat me to the punch :) If you wanted to make sure you don't miss any matches in case you modify the hash in the future, you could make the following mods to Enlil's code:
...
my $changeList = join('|',(keys %changes));
...
$string =~ s/($changeList)/$changes{$1}/g;