my $pattern = join "|", map quotemeta, keys %key: sub decode { $$message->{body} =~ s/($pattern)/$key{$1}/og; } #### use Regex::PreSuf; my $pattern = presuf(keys %key); #### [\^\~\@\!\#\$\%\&\(\)\*\+\-0123456789\\\=\|]