And just for comparison:
require 'cgi'
cgi = CGI.new('html4')
a = cgi['a']
a.sub!(/hi/, 'bye')
p a
p [a]
p [a].flatten
ruby:
(offline mode: enter name=value pairs on standard input)
a=hi
"bye"
["bye"]
["hi"]
jruby:
(offline mode: enter name=value pairs on standard input)
a=hi
"bye"
["bye"]
["hi"]
oh, and also:
irb(main):001:0> a = "hi"
=> "hi"
irb(main):002:0> a.sub!(/hi/, "bye")
=> "bye"
irb(main):003:0> a
=> "bye"
irb(main):004:0> [a]
=> ["bye"]
irb(main):005:0> [a].flatten
=> ["bye"]