Diceです。

ruby 1.9.1 での IO について、よく分からない動作を見つけたのですが
私の勘違いなのか ruby 本体のバグなのか、今ひとつ判断がつきかねるので
こちらで質問させてください。
環境は ruby 1.9.1 (2009-01-30 revision 21907) [i386-mswin32] です。


次のようなスクリプトをファイルに保存して……

--------
open('test.txt', 'w'){|f|
	f.write(<<TEXT)
line 1
line 2
TEXT
}

open('test.txt', 'r:us-ascii'){|input|
	puts "<ascii mode>"
	
	p input.gets
	p input.gets
	p input.gets
	input.rewind
	
	p input.gets
	input.set_encoding('us-ascii')
	p input.gets
	p input.gets
	input.rewind
}


open('test.txt', 'rb:us-ascii'){|input|
	puts "<binary mode>"
	
	p input.gets
	p input.gets
	p input.gets
	input.rewind
	
	p input.gets
	input.set_encoding('us-ascii')
	p input.gets
	p input.gets
	input.rewind
}
--------

このスクリプトを ruby で実行すると、次のように出力されます。

--------
<ascii mode>
"line 1\n"
"line 2\n"
nil
"line 1\n"
"\n"
"line 2\n"
<binary mode>
"line 1\r\n"
"line 2\r\n"
nil
"line 1\r\n"
"line 2\r\n"
nil
--------

ここで ascii mode の出力5行目は、なぜ "line 2\n" ではなく "\n" なのでしょうか?


--------------------------------
Dice
tetradice+ruby / gmail.com