與$ 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