与$ 1相比,\ 1有什么区别,如果有的话,或者它们在所有情况下都可以互换。
例子:
s/([a-z]+),afklol/$1,bck/;
#against
s/([a-z]+),afklol/\1,bck/;
他们都给予同样的结果,但有什么区别呢?
与$ 1相比,\ 1有什么区别,如果有的话,或者它们在所有情况下都可以互换。
例子:
s/([a-z]+),afklol/$1,bck/;
#against
s/([a-z]+),afklol/\1,bck/;
他们都给予同样的结果,但有什么区别呢?
直接从perldoc perlre:
警告在\ 1比$ 1
有些人太习惯了编写 的东西,如:
$pattern =~ s/(\W)/\\\1/g;
这是祖父对于a的RHS 替代,以避免令人震惊的成瘾者,但它是一个肮脏的习惯得到 成。这是因为在PerlThink中,“s ///”的右边是 双引号字符串。 “\ 1”中的 通常的双引号字符串表示控制-A为 。 “\ 1”的习惯Unix含义 因为“///”而被封存。 但是,如果您养成了这样做的习惯,如果您添加了“/ e” 修饰符,您会陷入 的困境。
s/(\d+)/ \1 + 1 /eg; # causes warning under -w
或者,如果你尝试做
s/(\d+)/\1000/;
不能消除歧义,通过说 “{1} 000”,而你可以用 修复它 “$ {1} 000” 。不应将 插值的操作与 与匹配 反向引用的操作混淆。
当然,它们是指“s ///”左侧有两个不同的 东西。
他们给出了相同的结果,但1美元保留其价值,而1美元没有。试试这个:
s/([a-z]+),afklol/$1,bck/;
print "\$1 is $1\n";
#against
s/([a-z]+),afklol/\1,bck/;
print "\\1 is \1\n";
这是因为在m //或s /// \ 1之外不是反向引用。 (它实际上取决于上下文。) – 2009-07-01 17:39:08