[#10853] Why limit class def to a constant or colon node? — Charles Oliver Nutter <charles.nutter@...>

Is there a historical reason why I can't do something like these:

12 messages 2007/04/03

[#10933] Cannot build with extra library path if previous version already installed — <noreply@...>

Bugs item #10140, was opened at 2007-04-16 17:32

10 messages 2007/04/16
[#10934] Re: [ ruby-Bugs-10140 ] Cannot build with extra library path if previous version already installed — nobu@... 2007/04/16

Hi,

[#10960] Re: [ ruby-Bugs-10140 ] Cannot build with extra library path if previous version already installed — "Michal Suchanek" <hramrach@...> 2007/04/18

On 4/16/07, nobu@ruby-lang.org <nobu@ruby-lang.org> wrote:

[#10967] Re: [ ruby-Bugs-10140 ] Cannot build with extra library path if previous version already installed — Nobuyoshi Nakada <nobu@...> 2007/04/19

Hi,

[#10970] Re: [ ruby-Bugs-10140 ] Cannot build with extra library path if previous version already installed — "Michal Suchanek" <hramrach@...> 2007/04/19

On 4/19/07, Nobuyoshi Nakada <nobu@ruby-lang.org> wrote:> Hi,>> At Wed, 18 Apr 2007 20:21:44 +0900,> Michal Suchanek wrote in [ruby-core:10960]:> > Yes. And this should also apply to extensions. The mkmf tests are now> > fine but the extension is linked with -L/sw/lib before -L../..>> Indeed.>>> Index: configure.in> ===================================================================> --- configure.in (revision 12191)> +++ configure.in (working copy)> @@ -1385,5 +1385,4 @@ if test "$enable_rpath" = yes; then> fi>> -LDFLAGS="-L. $LDFLAGS"> AC_SUBST(ARCHFILE)>This would break the previous fix so I did not even try to apply this ^

[#11003] miniruby loads extensions from already installed ruby — <noreply@...>

Bugs item #10303, was opened at 2007-04-23 10:44

10 messages 2007/04/23

[#11025] gsub with backslash characters in replacement string — "Adam Bozanich" <adam.boz@...>

Hello, spotted this one the other day:

10 messages 2007/04/26

Re: [patch] gsub with backslash characters in replacement string

From: "Adam Bozanich" <adam.boz@...>
Date: 2007-04-26 20:21:53 UTC
List: ruby-core #11041
On 4/26/07, Marte Raphael Y. Soliza <myrtactle@gmail.com > wrote:
>
> On 4/26/07, Adam Bozanich <adam.boz@gmail.com > wrote:
> >
> > On 4/26/07, Yukihiro Matsumoto <matz@ruby-lang.org> wrote:
> > >
> > > Hi,
> > >
> > > In message "Re: [patch] gsub with backslash characters in replacement
> > > string"
> > >     on Thu, 26 Apr 2007 17:09:42 +0900, "Adam Bozanich" <adam.boz@gmail.com >
> > > writes:
> > >
> > > |Hello, spotted this one the other day:
> > > |
> > > |irb(main):001:0> '\\'.gsub('\\','\\\\')
> > > |=> "\\"
> > > |irb(main):002:0> '\\'.gsub('\\','\\\\\\')
> > > |=> "\\\\"
> > > |
> > > |The following patch seems to fix things on my system
> > >
> > > It was intentional to escape backslashes in replacement string.
> > > If it were a bug, how do we escape backslashes?  Any idea?
> > >
> > >                                                         matz.
> > >
> > >
> > Not sure that I'm understanding you here.
> >
> > let's try again.
> >
> > test.rb:
> >
> > 1.upto(6) do |x|
> >     print "a".gsub("a","\\"*x).size , " "
> > end
> >
> > print "a".gsub("a","\n")
> >
> > before patch output is:
> > 1 1 2 2 3 3
> >
> > after patch output is:
> > 1 2 3 4 5 6
> >
> > Note that the newline works in both cases.
> >
> > -Adam
> >
>
> It has something to do with replacing groups in regular expressions. For
> example, you can do:
> >> "abc".gsub(/(.)/, "\\1,")
> => "a,b,c,"
>
> So, to escape literal backslashes in replacements, we need four
> backslashes:
> \\\\ # actual code
> \\ # actual string
> \ # actual replacement
> Now if we have an odd number of actual backslash characters, then the last
> one will be treated as a literal:
> \\\\\\ # actual code
> \\\ # actual string
> \\ # actual replacement
>
> What we can do is to not double-escape the backslashes if the first
> argument is non-regex. Though that maybe a little confusing especially if
> you expect your first argument to be both string and regex.



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

In This Thread