It would make sense to have a pair replace and replace!.
For example for Strings, it could be imagined such methods myreplace
and myreplace!:
a="abcd"
b=a.myreplace('a', 'b')
puts(a) # => "abcd"
puts(b) # => "bbcd"
b=a.myreplace!('a', 'c')
puts(a) # => "cbcd"
puts(b) # => "cbcd"