如何解释替换?

use*_*973 0 perl

$test='abc="def"';
$replacement='$1="ghj"';
$test =~ s/(.+)="(.+)"/"$replacement/;
print $test;
Run Code Online (Sandbox Code Playgroud)

它打印:

$1=ghj
Run Code Online (Sandbox Code Playgroud)

我怎么对待$replacement解释?

TLP*_*TLP 6

您将/e修改器添加到正则表达式.您还需要修改替换字符串,以便正确评估它.插值变量需要双重评估.

my $test='abc="def"';
my $replacement='"$1=ghj"';
$test =~ s/(.+)="(.+)"/$replacement/ee;
print $test;
Run Code Online (Sandbox Code Playgroud)

输出:

abc=ghj
Run Code Online (Sandbox Code Playgroud)

应该注意的是,这有点不安全,特别是如果其他人可能影响您的更换价值.然后他们可以在您的系统上执行任意代码.