Ruby 1.8.7 リファレンスマニュアル > ライブラリ一覧 > 組み込みライブラリ > Kernelモジュール > $deferr

variable $deferr

$stderr -> object[permalink][rdoc]
$deferr -> object

標準エラー出力です。

Ruby インタプリタが出力するエラーメッセージや 警告メッセージ、Kernel.#warn の出力先となります。 初期値は Object::STDERR です。

$stderr には $deferr という別名がありますが、 $deferr は非推奨(obsolete)になったので、 新しいコードでは常に $stderr を使ってください。

$stderr に代入するオブジェクトには write という名前のメソッドが定義されていなければいけません。

自プロセスの標準エラー出力をリダイレクトしたいときには、 $stderr に代入すれば十分です。

# 標準エラー出力の出力先を /tmp/foo に変更
$stderr = File.open("/tmp/foo", "w")
puts "foo"         # 出力する
$stderr = STDERR   # 元に戻す

自プロセスだけでなく、子プロセスの標準エラー出力も リダイレクトしたいときは以下のように IO#reopen を使います。

$stderr.reopen("/tmp/foo", "w")

また、リダイレクトしたあと 出力先をまた元に戻したい場合は以下のようにします。

stderr_old = $stderr.dup        # 元の $stderr を保存する
$stderr.reopen("/tmp/foo")      # $stderr を /tmp/foo にリダイレクトする
puts "foo"                      # /tmp/foo に出力
$stderr.flush                   # 念のためフラッシュする
$stderr.reopen stderr_old       # 元に戻す

$stderr はグローバルスコープです。