こんにちは、越水です。

まず、Threadなのですけど、下のコードを実行して、
Ctrl-Dを入力しても、puts "die"が実行されないのですが、
何がおかしいのでしょうか?

class MyThread
  def doit
    @live = true
    Thread.start {
      while @live
        puts "live!"
        sleep(1)
      end
      puts "die"   # not executed
    }
    while (line = $stdin.gets)
    end
    @live = false
  end
end

MyThread.new.doit

次はMarshalなのですけど、下の2つのプログラムをシェルで
`ruby dump.rb | ruby load.rb'とパイプで結んで
実行したのですが、コンソールで文字化けを起こします。
他に何かやっておくことがあるのでしょうか?

# dump.rb
class Foo
  def to_s
    'foo'
  end
end
Marshal.dump(Foo.new, $stdout)

# load.rb
require "dump"
obj = Marshal.load($stdin)
puts obj.to_s

越水
greentea / fa2.so-net.ne.jp