From: benny Date: 2005-11-11T11:20:19+09:00 Subject: Nightmare with gsub & friends Dear List, took me hours to find out, where my backslashes magically disappeared. finally found something like this: r = "value: <% replace_me %>" s = "\"\\\" some quotations \\\" \\\\\\\"really weird quotation\\\\\\\"\"" # try a regexp reg = /(<%\s*replace_me\s*%>)/ p r.gsub(reg, s) # => "value: \"\\\" some quotations \\\" \\\\\"really weird quotation\\\\\"\"" while its documented and arguable that backslashes are interpreted they should not disappear IMHO no_reg = "<% replace_me %>" p r.gsub(no_reg, s) # => "value: \"\\\" some quotations \\\" \\\\\"really weird quotation\\\\\"\"" but if we use no regexp it really makes no sense to interpret backslashes here. who needs/expects this? p r.gsub(no_reg, '\1\2') # => "value: " If you use lots of regexps in a recursive loop down a chain of in string substitutions such things are really hard to debug, believe me. Now the solution is to use a block instead of the second parameter. p r.gsub(no_reg){ s } # => "value: \"\\\" some quotations \\\" \\\\\\\"really weird quotation\\\\\\\"\"" In fact I do need the bahaviour with the block a lot more often than \1 & friends. So I am going to replace it everywhere in my code. Just wanted to share the experience, I guess there might be some people out there who weren't aware of that behaviour. It wasn't the principle of my least surprise this time :) have a good night, benny