You need to doubly evaluate the substitution string:
use strict; use warnings; my $fileStr = <<'END_FILE'; ([A-Za-z])\.[A-Za-z],$1 END_FILE open my $inFile, "<", \$fileStr or die "Can't open file: $!\n"; my $rrow_test = 'A.BC'; while (my $regex = <$inFile>) { chomp $regex; my @rex = split (/,/, $regex); $rrow_test =~ s/$rex[0]/$rex[1]/eeg; print "$rrow_test\n"; } close $inFile;
Prints:
AC
Note that double evaluating the string is like using string eval and is generally considered evil, or at least a huge security risk. For example, try it with the string '([A-Za-z])\.[A-Za-z],@{[print "this could have been: `rm *`\n"]}' in $fileStr
In reply to Re: backreference replaced as literal or just fails
by GrandFather
in thread backreference replaced as literal or just fails
by brwarn
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |