Rubyリファレンスマニュアル 1.6.8から1.8.0への変更点(まとめ)

$stdin [change]

$stdout, $stderr は、$defout, $deferr の別名になり $defout, $deferr は obsolete になりました

$stdin は、普通のグローバル変数となりました(STDINをリダイレクトする動作はなくなりました)

$defout や $deferr に代入を行うと警告がでます。 (注:1.6 に $deferr はありません) [ruby-dev:20961]

$stdin にオブジェクトを代入すると標準入力からの入力メソッド(gets 等) はそのオブジェクトにメソッドを投げます。 (リダイレクトしなくなった点を除けば、1.6 とそれほど違いはないようです)

1.6.8 では

$stdout = File.open("xxx", "w")
STDOUT.reopen("xxx", "w")

で、以降のプログラムでの標準出力への書き込みがファイル xxx にリダ
イレクトされていた。

1.8 では、前者が Ruby 内部でのリダイレクト、 後者が OSでのリダイレ
クトになり、
前者ではその文を実行するプロセスでのみリダイレクトされ、
後者は(今までどおり、 Cなどでもたぶん同じ)子プロセスまでリダイレク
トが波及する。