Question: Should String.upcase! work on a segment of a string? We can assign to a sub-string, so I thought that a bang-method might also work on a sub-string. s = 'AA11zz' # define a string > s[4..5].upcase! # try to change part of it => "ZZ" # yeah, ok, the new string is changed, but... > s => "AA11zz" # the original string wasn't affected > s[4..5] = s[4..5].upcase # so, do it by-hand => "ZZ" > s # and it's ok => "AA11ZZ" Are there edge cases where this wouldn't be appropriate?