A very weird bug in ruby

Yes yes, I think I have found my 2nd compiler bug (not counting
realbasic). I think I found an actual bug in Ruby, on all platforms
none the less (well linux and mac).

if yu just run console or irb and do this

ph = "no.305.week"

b = ph+"5"
returns "no.305.week5"

then do
b.delete ph

and it returns empty string

If you put anything BUT 5 in the string, everything works. Also if
you substitute 305 with something that is not a number only everything
works.

I have put in more thoughts on this in my blog :
http://traustithor.blogspot.com/2010/04/most-funny-but-annoying-ruby-bug.html

If anyone can cast any idea on this as to why this is happening, I
would love to hear it. I know the bug is in the delete function, I
want some more and deeper idea as to why.
This is such an edge case.

Trausti

Yes yes, I think I have found my 2nd compiler bug (not counting
realbasic). I think I found an actual bug in Ruby, on all platforms
none the less (well linux and mac).

if yu just run console or irb and do this

ph = "no.305.week"

b = ph+"5"
returns "no.305.week5"

then do
b.delete ph

and it returns empty string

If you put anything BUT 5 in the string, everything works. Also if
you substitute 305 with something that is not a number only everything
works.

I think you misunderstand what delete is supposed to do. It does not
mean 'find occurrences of the substring and remove them'. Instead it
removes any characters present in all of the arguments, so for example

"a1b2c3d4e5".delete('12345') #=> 'abcde'
"a1b2c3d4e5".delete('12345', '123') #=> 'abcd4e5'

In your case the string b, by construction contains only characters
present in ph (since the 5 that you add at the end of it is already
present in ph)

Fred

Ah ha. That makes delete actually quite cool function. Thank you.

Trausti