in 6, the backslash escapes the ending ', which is not what I wanted. In 8, the double backslash becomes two backslashes, which is not what I wanted either.
I get exactly the same problem with double quotes.
There is a difference between what is written in your code and what
the output will be.
"\\" is not the same as "\", which is why irb prints the string
constant as you entered it. But if you print it, it will output what
you expected, i.e. a backslash.
in 6, the backslash escapes the ending ', which is not what I wanted. In 8,
the double backslash becomes two backslashes, which is not what I wanted
either.
I get exactly the same problem with double quotes.
Right. Additional explanation: the reason for this is that IRB by
default uses #inspect - the same method that #p uses for printing:
irb(main):007:0> s = "a"
=> "a"
irb(main):008:0> puts s
a
=> nil
irb(main):009:0> p s
"a"
=> "a"
irb(main):010:0> puts s.inspect
"a"
=> nil
irb(main):011:0> s
=> "a"
irb(main):012:0>
There is a difference between what is written in your code and what
the output will be.
"\\" is not the same as "\", which is why irb prints the string
constant as you entered it. But if you print it, it will output what
you expected, i.e. a backslash.