我认为我的问题非常类似于此问题: How to use a variable in the replacement side of the Perl substitution operator? 区别在于,$ find和$ replace是我正在使用的哈希的键和值。
while(($find,$replace) = each %hash){
$string_to_check =~ s/$find/$replace/e;
}
这是我的哈希
中一对键值对的示例键:^ / abc(/.*)?$
价值:www.abc.website.com $ 1
我在这里得到了替换,但是1美元不会被(/.*)的内容所取代。
使用s /// ee而不是s /// e,我得到:
Bareword found where operator expected at (eval 1) line 1, near "//xyz"
(Missing operator before xyz?)
Use of uninitialized value in substitution iterator at ./script line 46, <FH1> line 3470.
...因此匹配的部分将替换为空字符串。
我假设,
while(($find,$replace) = each %hash)
与我链接到的主题中另一个问题的第一个答案中的单引号不一样:
$replace='"foo $foo bar"';
是吗?
请原谅我的英文,并提前感谢您的帮助。 (我是Perl和编程的新手。)
答案 0 :(得分:1)
要评估$ replace中存储的$ 1,您需要使用eval
。请注意,eval
可能存在安全风险,因此请务必控制%hash
的内容。
while (my ($find, $replace) = each %hash) {
eval "\$string_to_check =~ s{$find}{$replace}";
}
答案 1 :(得分:-2)
替换$1
代替\1
使用/e
。这是对第一个匹配组的反向引用。我认为在这种情况下你也可以完全放弃{{1}}。