【发布时间】:2010-12-19 02:54:00
【问题描述】:
我知道 match、prematch 和 postmatch 预定义变量。我想知道 s/// 运算符的评估替换部分是否有类似的东西。
这在动态表达式中特别有用,因此不必对它们进行第二次评估。
例如,我目前有 %regexs,它是各种搜索和替换字符串的哈希。
这是一个sn-p:
while (<>) {
foreach my $key (keys %regexs) {
while (s/$regexs{$key}{'search'}/$regexs{$key}{'replace'}/ee) {
# Here I want to do something with just the replaced part
# without reevaluating.
}
}
print;
}
有没有方便的方法呢? Perl 似乎有很多方便的快捷方式,而且必须评估两次似乎是一种浪费(这似乎是另一种选择)。
编辑:我只是想举个例子:$regexs{$key}{'replace'} 可能是字符串 '"$2$1"' 从而交换了一些文本在字符串 $regexs{$key}{'search'} 可能是 '(foo)(bar)' - 从而导致 "barfoo"。我试图避免的第二个评估是 $regexs{$key}{'replace'} 的输出。
【问题讨论】: