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

时间:2013-11-20 21:20:56

标签: regex perl

基本上我想这样做:

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

类似的东西:

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

结果应为123 abc abc 456

有可能吗?

需要将

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

2 个答案:

答案 0 :(得分:4)

想出来。我需要对表达式进行双重评估(感谢@Birei指向我的regex evaluate命令。仍然无法在perl文档中找到它但是...不得不谷歌。:()

所以它变成了:

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

答案 1 :(得分:3)

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

#!/usr/bin/env perl

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

它产生:

123 abc abc 456