Ruby中的$ 1和\ 1
在Ruby中使用正则expression式时,$ 1和\ 1有什么区别?
 \ 1是一个反向引用,只能在相同的sub或gsub方法调用中使用,例如: 
 "foobar".sub(/foo(.*)/, '\1\1') # => "barbar" 
$ 1是一个全局variables,可以在以后的代码中使用:
 if "foobar" =~ /foo(.*)/ then puts "The matching word was #{$1}" end 
输出:
 "The matching word was bar" # => nil 
请记住,还有第三个选项,分块的forms。 有时你需要它。 假设你想用文本的相反replace一些文本。 您不能使用$ 1,因为它没有足够快的绑定:
 "foobar".sub(/(.*)/, $1.reverse) # WRONG: either uses a PREVIOUS value of $1, # or gives an error if $1 is unbound 
 你也不能使用\1 ,因为sub方法只是用适当的捕获文本做一个简单的文本replace\1 ,这里没有什么魔法发生: 
 "foobar".sub(/(.*)/, '\1'.reverse) # WRONG: returns '1\' 
所以,如果你想做任何事情,你应该使用块的forms($ 1,$ 2,$`,$等)将可用):
 "foobar".sub(/.*/){|m| m.reverse} # => returns 'raboof' "foobar".sub(/(...)(...)/){$1.reverse + $2.reverse} # => returns 'oofrab'