如何使用哈希的键和值来搜索和替换(替换)

时间:2011-10-06 19:22:16

标签: perl hash replace substitution

我认为我的问题非常类似于此问题: 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和编程的新手。)

2 个答案:

答案 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}}。