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

% ruby -e 'ARGF.each {|x| ARGF.eof? }'
a<^D><^D>

それに対し、次のプログラムは終了するまでに ^D がもう一つ必要です。
つまり EOF が 2回送られています。

% ruby -e 'ARGF.each {|x| }'          
a<^D><^D><^D>

また、ARGF でなく STDIN で同様に試すと、eof? の呼び出しに関係なく ^D
は後者と同様に 3つ必要になります。

% ruby -e 'STDIN.each {|x| }'
a<^D><^D><^D>

% ruby -e 'STDIN.each {|x| STDIN.eof? }'
a<^D><^D><^D>

挙動を比較すると、ARGF.each {|x| ARGF.eof? } が他と異なるのですが、いっ
たいどちらが意図された挙動なのでしょうか?
-- 
[田中 哲][たなか あきら][Tanaka Akira]