Project

General

Profile

Backport #3200

String#gsub! doesn't error on frozen string

Added by candlerb (Brian Candler) almost 9 years ago. Updated almost 8 years ago.

Status:
Open
Priority:
Normal
Assignee:
-
[ruby-core:29784]

Description

=begin
gsub! does not raise an error on a frozen string unless a change is actually made. e.g.

s = "a".freeze
=> "a"
s.gsub!(/b/,'')
=> nil

But this is inconsistent with other mutating methods on frozen strings, e.g.

s.squeeze!
TypeError: can't modify frozen string
from (irb):3:in squeeze!'
from (irb):3
from :0
s.tr!('b','c')
TypeError: can't modify frozen string
from (irb):4:in
tr!'
from (irb):4
from :0

Not sure if this unexpected behaviour is "bug" or "feature". The ri documentation of String#gsub! doesn't mention this anomaly.

Tested with ruby 1.8.7 (2009-06-12 patchlevel 174) [x86_64-linux] from Ubuntu Karmic
=end

History

#1

Updated by nobu (Nobuyoshi Nakada) almost 9 years ago

=begin
1.9.2 does raise an exception, so I guess it would be
"backport".

=end

Also available in: Atom PDF