##
my $re = join '|', keys %dict;
$re = qr|($re)|;
s/$re/$hash{$1}/g;
####
use Regexp::Assemble;
my $ra = Regexp::Assemble->new;
$ra->add($_) for keys %dict;
####
s/(\w+)/$dict{$1}||$1/ge;
####
s/(\w+)(?(?{$dict{$1}})|(?!))/$dict{$1}/g;