-1

考虑一下:

my $var = "${SOME_VAR}"

my $string "In this text ${SOME_VAR} will be replaced with X"

$string =~ s/$var/X/g;

print "\nprocessed string = <".$string.">";

返回

processed string = <In this text ${SOME_VAR} will be replaced with X>

即不发生替换。

但是,如果 $var 不包含保留字符 ($),则会发生替换:

my $var = "SOME_VAR"
/* everything else the same */

返回

processed string = <In this text ${X} will be replaced with X>

但是我不知道当保留字符包含在变量中时如何转义它们,即当搜索标记不是显式但参数化时。

任何想法?

谢谢

4

2 回答 2

1

您的字符串包含$具有特殊含义的字符串..您可以使用\Qand\E让它工作..

$string =~ s/\Q$var\E/X/g;

\Q 禁用模式元字符,直到 \E

于 2012-10-03T16:17:53.933 回答
0

${foo}语法是软引用,即使在字符串内部也是如此。您正在间接分配$SOME_VARto的值$var。如果$SOME_VAR是 undef,你会得到一个空字符串,在正则表达式中总是匹配

$除了使用\QRohit Jain 指出的那样,单引号或转义解决了问题。

于 2012-10-03T16:30:02.883 回答