Perldoc变量语法:$ foo vs $ {foo}

时间:2012-05-19 09:57:04

标签: regex perl perldoc

当我在一个示例中遇到这个时,我只是在浏览perldocs(http://perldoc.perl.org/perlre.html#Regular-Expressions - 请参阅Capture Groups示例)

"aa" =~ /${a}/; # True
"aa" =~ /${b}/; # True
"aa0" =~ /${a}0/; # False!
"aa0" =~ /${b}0/; # True
"aa\x08" =~ /${a}0/; # True!
"aa\x08" =~ /${b}0/; # False

我找不到任何关于语法含义的文档。

那么在这种情况下正则表达式/ $ {a} /是什么意思?

2 个答案:

答案 0 :(得分:3)

需要大括号来消除$a $a0的歧义。请注意,标记生成器是贪婪的,因此变量名称可能是最长序列。如果在变量插值中跟随另一个字母或数字,则需要${name}语法。

答案 1 :(得分:2)

带括号的$ p避免了变量名的含糊不清。这样:

$foo = 'house';
'housecat' =~ /$foo/;      # matches
'cathouse' =~ /cat$foo/;   # matches
'housecat' =~ /${foo}cat/; # matches

同样在你给出的链接中,有一个$ a和$ b的定义,但是你忘了在这里复制。