Во-первых, рабочий пример:
string = "foo-bar-25-baz"
if string =~ /(.+)-(10|25)(?:-(baz))?/
puts $1
puts $2
puts $3
end
Это выдает «foo-bar», «25» и «baz» в трех строках, как и ожидалось.Но если мы сделаем это:
string = "foo-bar-25-baz"
if string =~ /(.+)-(10|25)(?:-(baz))?/
puts $1.gsub('-', ' ') # Here be the problem
puts $2 # nil
puts $3 # nil
end
значения $2
и $3
теперь равны нулю.Я должен puts $2
и puts $3
и затем $1.gsub(...)
, и это будет работать.Насколько я могу судить, это относится только к gsub
и gsub!
Это вызывает ту же проблему:
string = "foo-bar-25-baz"
if string =~ /(.+)-(10|25)(?:-(baz))?/
puts $3.gsub('hard', 'h')
puts $1 # nil
puts $2 # nil
end
Я потратил около 15 минут на отладку, и мне интересно,почему.