From: Moxley Stratton Date: 2011-10-13T02:38:55+09:00 Subject: [ruby-core:40122] [Ruby - Bug #1443] String#gsub handles backslashes incorrectly 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