[#1026] Is this a bug? — Dave Thomas <Dave@...>

18 messages 2000/01/03

[#1084] Infinite loop — Dave Thomas <Dave@...>

17 messages 2000/01/11

[#1104] The value of while... — Dave Thomas <Dave@...>

24 messages 2000/01/11

[ruby-talk:01194] Re: Semantics of chomp/chop

From: matz@... (Yukihiro Matsumoto)
Date: 2000-01-28 23:36:47 UTC
List: ruby-talk #1194
Hi,

In message "[ruby-talk:01193] Semantics of chomp/chop"
    on 00/01/28, Dave Thomas <Dave@thomases.com> writes:

|If no change is make to $_, a new copy of it is returned. If a change
|_is_ made, then it becomes the copy, which is returned.
|
|This additional rb_str_dup looks like it's trying to avoid some kind
|of aliasing problem. Is the extra copy necessary?

Since there's no way to detect whether rb_str_chomp_bang will success,
copying string is necessary.  But there's no need to return the copy.
I'll fix it.  gsub should return the original string if no change is made.

By the way, I've heard the trouble (not Ruby's bug) about gsub!/sub!
sometimes that bang methods cannot be chained like

  str.gsub!(pat1,repl1).gsub!(pat2,repl2).gsub!(pat3,repl3).

where non bang sub/gsub work just fine

  str.gsub(pat1,repl1).gsub(pat2,repl2).gsub(pat3,repl3).

This is because gsub!/sub! returns nil if no replacement happened.
I made it so to know whether change is made or not.  There's no other
easy way to know this.  But if this behavior is a source of big troubles,
I'd think of changing the behavior.

							matz.

In This Thread