假设我有一个哈希:
%hash = ("dog1" => "1",
"dog2" => "2",
"dog3" => "3");
和一个字符串:
$string = "dog1 dog2 dog3";
如果哈希值中的狗的值是奇数,我需要用$string
替换cat
中的所有“狗”。所以最后我希望我的字符串是:
"cat1 dog2 cat3"
我怎样才能使用正则表达式?我可以很容易地将所有的狗变成猫:
$string =~ s/dog/cat/g;
但那不是我想要的。有没有办法可以有条件地用正则表达式替换?
答案 0 :(得分:2)
您可以使用/e
修饰符。从perldoc: /e
将导致替换部分被视为完整的Perl表达式并在那时进行评估。例如:
$string=~s/(dog(\d+))/$hash{$1}%2==0?$1:"cat$2"/eg;
print $string; #prints cat1 dog2 cat3