Issue #1443 has been updated by Moxley Stratton.


puts "\\"
\

puts "s".gsub("s", "\\")
\

puts "\\\\"
\\

puts "s".gsub("s", "\\\\")
\

gsub() returns inconsistent results. It should not modify the replacement string value.

string = File.read(some_file_with_backslashes_in_it)

string = "s".gsub("s", File.read(some_file_with_backslashes_in_it))

The above two examples should give the same result, but they don't. The file content has been modified by gsub(). It should not be modified.

This is not an issue with Ruby string literal syntax. It is an issue with gsub() and sub() methods.
----------------------------------------
Bug #1443: String#gsub handles backslashes incorrectly
http://redmine.ruby-lang.org/issues/1443

Author: shawn landen
Status: Rejected
Priority: Normal
Assignee: 
Category: 
Target version: 
ruby -v:   ruby 1.8.7 (2008-08-11 patchlevel 72) [x86_64-linux]


=begin
 @Shyouhei Urabe
 
 I didn't see how to comment on the bug so i hid to file a new one
 This is a continuation of bug #1441
 
 The backslashes are being doubled under single quotes and double quotes, but String#gsub requires you to quadruple (4x) them, 4 backslashes for every one in the resultant string.
 
 printf "b".gsub("b","\\\\")
 
 prints a single backslash(\), while it should print 2(\\). (as printf "\\\\"; does)
 
 The reason it looks different is because String#inspect shows strings as escaped.
=end



-- 
http://redmine.ruby-lang.org