有没有办法在替换中使用变量作为修饰符?
my $search = 'looking';
my $replace = '"find: $1 ="';
my $modifier = 'ee';
s/$search/$replace/$modifier;
我需要使用哈希数组来使用不同的修饰符进行批量搜索替换。
最佳答案
而使用eval
的方法编译一个新的替换可能是最直接的,你可以创建一个更模块化的替换:
use warnings;
use strict;
sub subst {
my ($search, $replace, $mod) = @_;
if (my $eval = $mod =~ s/e//g) {
$replace = qq{'$replace'};
$replace = "eval($replace)" for 1 .. $eval;
} else {
$replace = qq{"$replace"};
}
sub {s/(?$mod)$search/$replace/ee}
}
my $sub = subst '(abc)', 'uc $1', 'ise';
local $_ = "my Abc string";
$sub->();
print "$_\n"; # prints "my ABC string"
这只是经过轻微测试,留作练习供读者实现其他标志,如
g
关于regex - 如何在替换中使用变量作为修饰符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3238348/