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"]