Win8 Strawberry 5.8.9.5 (32) Fri 11/06/2020 19:28:21 C:\@Work\Perl\monks >perl use strict; use warnings; my $string = 'foo + bar == baz'; my %xlate = ( 'foo' => 'wibble', 'bar' => 'wobble', 'baz' => 'boff', '+' => 'plus', '==' => 'equals', ); my ($rx_token) = map qr{ $_ }xms, join ' | ', map quotemeta, reverse sort keys %xlate ; print "\$rx_token $rx_token \n"; # for debug print "before: '$string' \n"; $string =~ s{ ($rx_token) }{$xlate{$1}}xmsg; print "after: '$string' \n"; ^Z $rx_token (?msx-i: foo | baz | bar | \=\= | \+ ) before: 'foo + bar == baz' after: 'wibble plus wobble equals boff'