我想在其他线路上写1美元进行更换;
my $converting_rules = +{
'(.+?)' => '$1',
};
my $pre = $converting_rule_key;
my $post = $converting_rules->{$converting_rule_key};
#$path_file =~ s/$pre/$post/; // Bad...
$path_file =~ s/$pre/$1/; // Good!
On Bad,$ 1被识别为字符串'$ 1'。 但是我要把它当作匹配的字符串。 我不知道该怎么做......请帮助我!
答案 0 :(得分:2)
问题是s/$pre/$post/
插入了变量$pre
和$post
,但不会递归插入其中看起来像变量的任何内容。因此,您希望使用eval
标记为替换添加额外的/ee
:
$path_file =~ s/$pre/$post/ee;
答案 1 :(得分:0)
$x = '$1.00';
print qq/$x/;
打印$1.00
,所以毫不奇怪
$x = '$1.00';
s/(abc)/$x/;
用$1.00
代替。
您所拥有的是一个模板,但您没有采取任何措施来处理此模板。 String::Interpolate可以处理此类模板。
use String::Interpolate qw( interpolate );
$rep = '$1';
s/$pat/ interpolate($rep) /e;