From: WATANABE Hirofumi Date: 1999-04-11T17:17:02+09:00 Subject: [ruby-list:13595] Re: telnet.rb STDOUT わたなべです. Wakou Aoyama writes: :rb_define_hooked_variable() で $stdout が定義されているからなんでしょ :うかね。$0 と異なりフックは必要ないような気も。と思ったら、タイプチェッ :クを行っているんですか。 それよりも reopen しなきゃいけないというのが hook の主目的です. :$ ruby -e ' :$stdout.print "hogehoge1\n" :$stdout = open("/dev/null", "w") :$stdout.print "hogehoge2\n" :$stdout = STDOUT :$stdout.print "hogehoge3\n" :' :hogehoge1 : :この挙動はやはりおかしいですよね。$stdout に代入が行われても $stdout.id :が変化しないのが原因なのでしょうけれど。 だから id は変化しません. STDOUT は $stdout の別名にすぎない ので(ただし大文字で始まってるから定数として扱われる) $stdout = STDOUT は意味がないです. 元に戻すにはあらかじめ stdout_original = $stdout.dup して保存し $stdout = stdout_original する必要があります. ちなみに STDOUT を殺すだけなら def STDOUT.write(x) end ってうそうそ. 全部殺しちゃ意味ないって. 基本的に stdout は 1 個しかないので telnet.rb のほうでやっぱ り対処するほうがいいかもしれない. /dev/tty とか言い出すとプ ラットフォーム依存の問題が出てくるし. -- わたなべひろふみ