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などでもたぶん同じ)子プロセスまでリダイレク
トが波及する。