まつもと ゆきひろです

In message "[ruby-dev:22469] ARGF.each {|x| ARGF.eof? } and number of Ctrl-Ds."
    on 04/01/01, Tanaka Akira <akr / m17n.org> writes:

|次のプログラムは、a^D^D と入力すると終了します。この場合終了には ^D は
|2つ必要になっています。最初の ^D は行バッファの flush なのでプログラム
|に送られた EOF は 1回です。

|挙動を比較すると、ARGF.each {|x| ARGF.eof? } が他と異なるのですが、いっ
|たいどちらが意図された挙動なのでしょうか?

ARGF.eof?が副作用を持っていました。

それはそれとして、なぜSTDINは3度^Dが必要なんでしょう?

  バッファのフラッシュで1度
  バッファ内容をプログラムに送るので1度(最初のyield)
  eachを終了させるのに1度

のように見えるんだけど。emacs上のデバッガからは1度eofを送る
と終了しますから、terminalがなにかしているのだと思うのですが。

                                まつもと ゆきひろ /:|)