我从外部源获取一堆文本,将其保存在变量中,然后将该变量显示为更大的HTML块的一部分。我需要按原样显示它,美元符号给我带来麻烦。
以下是设置:
# get the incoming text
my $inputText = "This is a $-, as in $100. It is not a 0.";
print <<"OUTPUT";
before-regex: $inputText
OUTPUT
# this regex seems to have no effect
$inputText =~ s/\$/\$/g;
print <<"OUTPUT";
after-regex: $inputText
OUTPUT
在现实生活中,那些print
块是更大的HTML块,直接插入变量。
我尝试使用s/\$/\$/g
转义美元符号,因为我的理解是第一个\$
转义正则表达式,因此搜索$
,第二个\$
是什么插入并稍后转义Perl,以便它只显示$
。但我无法让它发挥作用。
这是我得到的:
before-regex: This is a 0, as in . It is not a 0.
after-regex: This is a 0, as in . It is not a 0.
这就是我想要看到的:
before-regex: This is a 0, as in . It is not a 0.
after-regex: This is a $-, as in $100. It is not a 0.
谷歌搜索带我到this question。当我在答案中尝试使用数组和for循环时,它没有任何效果。
如何让块输出完全按原样显示变量?
答案 0 :(得分:7)
使用双引号构造字符串时,会立即执行变量替换。在这种情况下,您的字符串永远不会包含$
字符。如果您希望$
出现在字符串中,请使用单引号或转义它,并注意如果您这样做,您将不会获得任何变量替换。
至于你的正则表达式,这很奇怪。它正在寻找$
并将其替换为$
。如果你想要反斜杠,你也必须逃避它们。
答案 1 :(得分:4)
哼,好吧,我不确定一般情况是什么,但也许会有以下情况:这就是我想要看到的:
before-regex: This is a 0, as in . It is not a 0. after-regex: This is a $-, as in $100. It is not a 0.
s/0/\$-/;
s/in \K/\$100/;
或者你的意思是从
开始 my $inputText = "This is a \$-, as in \$100. It is not a 0.";
# Produces the string: This is a $-, as in $100. It is not a 0.
或
my $inputText = 'This is a $-, as in $100. It is not a 0.';
# Produces the string: This is a $-, as in $100. It is not a 0.
答案 2 :(得分:2)
您的错误是在变量声明中使用双引号而不是单引号。
这应该是:
# get the incoming text
my $inputText = 'This is a $-, as in $100. It is not a 0.';
了解'和'与`之间的区别。请参阅http://mywiki.wooledge.org/Quotes和http://wiki.bash-hackers.org/syntax/words
这适用于shell,但它在Perl中是相同的。