如何推迟替换以从搜索中访问var?

Adr*_*ian 5 regex perl

基本上我想这样做:

#!/usr/bin/perl
$search = qr/(?<X>abc)/;
$_ = "123 abc 456";
s/$search/$+{X} $+{X}/;
print;
Run Code Online (Sandbox Code Playgroud)

这样的事情:

#!/usr/bin/perl
$search = qr/(?<X>abc)/;
$replace = q($+{X} $+{X});
$_ = "123 abc 456";
s/$search/$replace/;
print;
Run Code Online (Sandbox Code Playgroud)

结果应该是123 abc abc 456.

可能吗?

$replace需要作为外部变量维护.所以,我不希望内容只是移动到另一个位置.我正在从文件中读取此信息.

Bir*_*rei 3

尝试使用函数添加一个标志来评估替换部件,如下所示:

#!/usr/bin/env perl

$search = qr/(?<X>abc)/;
$replace = sub { qq($+{X} $+{X}) };
$_ = "123 abc 456";
s/$search/$replace->()/e;
print;
Run Code Online (Sandbox Code Playgroud)

它产生:

123 abc abc 456
Run Code Online (Sandbox Code Playgroud)