Partly in answer to choroba's challenge, here's an
approach that works with forward/backslashes, escape sequences and
capture variables in replacement strings. Whether it will answer your
needs is another question. A fixup step for forward slashes is necessary. Works under
Perl versions 5.8.9 and 5.30.3.
Win8 Strawberry 5.8.9.5 (32) Thu 11/26/2020 4:08:05
C:\@Work\Perl\monks
>perl
use strict;
use warnings;
my $pattern = '(\\\\tEs/Ti//N\x67\\\)';
my $replacement = '\\\Fr/es//h\\\\ \U$1';
my $flags = 'i';
# $got_g is true if /g modifier present in flags.
# ($flags, my $got_g) = sanitize_flags_detect_g($flags);
fixup_forward_slashes($pattern, $replacement);
my $value = 'My \Tes/ti//ng\ Text';
print "replacement '$replacement' \n";
my $eval_string = "\$value =~ s/$pattern/$replacement/$flags";
print "eval_string '$eval_string' \n";
eval $eval_string;
print "eval err '$@' \n";
print "output '$value' \n";
sub fixup_forward_slashes { s{/}'\/'g for @_; }
^Z
replacement '\\Fr\/es\/\/h\\ \U$1'
eval_string '$value =~ s/(\\tEs\/Ti\/\/N\x67\\)/\\Fr\/es\/\/h\\ \U$1/i
+'
eval err ''
output 'My \Fr/es//h\ \TES/TI//NG\ Text'
It's awkward that a \ single literal backslash in the input/output
string must be represented by a \\ double backslash in the
substitution and by \\\ triple or \\\\\ quadruple backslashes in the
single-quoted pattern/replacement strings, but that's single/double-quotish
backslash handling for ya. If the pattern/replacement strings were
taken from a file, it would be possible to just use double backslashes.
Give a man a fish: <%-{-{-{-<