    # File lib/active_support/multibyte/chars.rb, line 225
          def []=(*args)
            replace_by = args.pop
            # Indexed replace with regular expressions already works
            if args.first.is_a?(Regexp)
              @wrapped_string[*args] = replace_by
            else
              result = self.class.u_unpack(@wrapped_string)
              if args[0].is_a?(Fixnum)
                raise IndexError, "index #{args[0]} out of string" if args[0] >= result.length
                min = args[0]
                max = args[1].nil? ? min : (min + args[1] - 1)
                range = Range.new(min, max)
                replace_by = [replace_by].pack('U') if replace_by.is_a?(Fixnum)
              elsif args.first.is_a?(Range)
                raise RangeError, "#{args[0]} out of range" if args[0].min >= result.length
                range = args[0]
              else
                needle = args[0].to_s
                min = index(needle)
                max = min + self.class.u_unpack(needle).length - 1
                range = Range.new(min, max)
              end
              result[range] = self.class.u_unpack(replace_by)
              @wrapped_string.replace(result.pack('U*'))
            end
          end