我接收正则表达式替换的左侧和右侧作为函数的参数。我希望我的用户能够使用捕获缓冲区,但它不能像我尝试的那样工作。
my $string = "This is my string";
$string = regex_replace($string,'is (my) string','$1');
print "$string\n";
sub regex_replace {
my ( $string,$left,$right ) = @_;
$string =~ s/$left/$right/gsm;
return $string;
}
执行此输出“此$ 1”而不是我试图获得的“This my”。有没有办法完成我想在这里做的事情?
答案 0 :(得分:2)
如果你想避免使用eval ...
my $string = "This is my string";
$string = regex_replace($string,'is (my) string','$1');
print "$string\n";
sub regex_replace {
my ( $string,$left,$right ) = @_;
$string =~ /$left/g;
$rv = $1;
$right =~ s/\$1/$rv/;
$string =~ s/$left/$right/gsm;
return $string;
}
答案 1 :(得分:0)
在regex_replace
中,您可以使用
eval "\$string =~ s/$left/$right/gsm";
但是eval STRING
给人们带来了heebie-jeebies。
以您的示例为例,输出为
This my