my %conv = ( '*' => '?', '?' => '#' );
my $conv = quotemeta(join('', keys(%conv)));
my $string = 't?e\\\\xt\\\\* with escapes\\*';
my $result = $string;
for ($result) {
s/(?##
my $string = 't?e\\\\xt\\\\* with escapes\\*';
my $result = '';
for ($string) {
/\G \\(.) /xgcs && do { $result .= $1; redo; };
/\G \* /xgcs && do { $result .= '?'; redo; };
/\G \? /xgcs && do { $result .= '#'; redo; };
/\G (.) /xgcs && do { $result .= $1; redo; };
}
print($result, "\n");
####
my $string = 't?e\\\\xt\\\\* with escapes\\*';
my $result = '';
for ($string) {
$result .= $1 if /\G ([^\\*?]+) /xgcs;
/\G \\(.) /xgcs && do { $result .= $1; redo; };
/\G \* /xgcs && do { $result .= '?'; redo; };
/\G \? /xgcs && do { $result .= '#'; redo; };
}
print($result, "\n");