遠藤です。

1.8 では ENV["FOO"] = nil は環境変数を消しますが、1.9 ではエラーになり、
不便です。子プロセスを作るときなどで、一時的に環境変数を変えるために

    env_foo = ENV["FOO"]
    ENV["FOO"] = "something"
    system(...)
    ENV["FOO"] = env_foo

で済んでいたところが

    env_foo = ENV["FOO"]
    ENV["FOO"] = "something"
    system(...)
    if env_foo
      ENV["FOO"] = env_foo
    else
      ENV.delete("FOO")
    end

ととても冗長になります。いろんなソースでこのコードを書く必要があります。
「nil の特別扱いをなくす」という一貫性のために、利便性が犠牲になりすぎ
だと思います。


なので、

1.  1.8 の挙動に戻す (ENV だけ nil を特別扱いする)
2.  1.8 の ENV#[]= と同じ挙動をするメソッドを提供する (ENV#assign とか)

のどっちかをするのはどうでしょうか。

-- 
Yusuke ENDOH <mame / tsg.ne.jp>