in reply to Substitution problem

Another way is to make a pattern that only matches the keys of your hash:
my $pat = join '|', map "\Q$_", keys %hash; $value =~ s/-($pat)-/$hash{$1}/g;