On 4/27/07, Roel Harbers <rubycore / roelharbers.com> wrote:
> Adam Bozanich wrote:
> > Thanks, now I understand the problem.
> >
> > for the record, this still works after the patch:
> >
> > "abc".gsub(/(.)/,'\1,') # => "a,b,c,"
> >
> > It is difficult (impossible?), however, to produce a \1 in the output
> >
> > irb(main):003:0> "abc".gsub(/(.)/,"\\\\1,")
> > => "\\\\1,\\\\1,\\\\1,"
> >
> > and similarly a '\' before a register replacement.
> >
> > irb(main):016:0> "a".gsub(/(.)/,"\\\\\\1,")
> > => "\\\\a,"
> >
> > I guess I just like having the "regex identity" property :)
> >
> > str = "\\" * 2
> > str == str.gsub(str,str)  # => true
> >
> > str = "a"
> > str == str.gsub(str,str)  # => true
> >
> > Sorry for the false bug.
> >
> > -Adam
>
> It may not be a bug, although it's definitly unexpected, but shouldn't
> the documentation at least mention the double-escaping?

Right. Especially when this is pretty frequent question. Longtime ago
I submitted the respective part from PickAxe2 as a rdoc patch (#5296,
http://rubyforge.org/tracker/?func=detail&aid=5297&group_id=426&atid=1700)

Now this is not the most fortunate approach, so one of the following
should be done:

- either ask Dave for permission to commit the patch
- or delete the patch, and create a new one by reading the source of
String#gsub.

(I would remove the patch myself but I haven't the permission to do this)

In conclusion, I think this bit of information is one of the most
missing and should be fixed.

Jano