Actions
Feature #11177
openDATAでEOF文字以降が読めない
    Feature #11177:
    DATAでEOF文字以降が読めない
  
Description
遠藤です。
Windows で __END__ 以降に EOF 文字 (\x1A) があったとき、それより先が読めないのは仕様でしょうか。
gen.rb:
puts "p DATA.read"
puts "__END__"
puts "foo\x1Abar"
以下のように実行すると再現します。
> ruby gen.rb > t.rb
> ruby t.rb
"foo"
DATA.binmode.read などとしてみても同じです。
もちろん、Linux では先まで読めます。Windows でも、ソースコードをパイプで流し込んだ場合はなぜか読めます。
> ruby < t.rb
"foo\x1Abar\n"
さらに、EOF 以降に文字がいっぱいあった場合、EOF 以降の一部の文字が抜け落ちるような挙動になるようです。
gen2.rb:
puts "p DATA.read"
puts "__END__"
puts "foo\x1A" + "X" * 8192 + "Z"
> ruby gen2.rb > t.rb
> ruby t.rb
"fooXXXXXXXXXXXXXXXXXXXXXXXXXXXZ\r\n"
バッファリングのバグっぽい挙動ですが、バグでしょうか。
--
Yusuke Endoh mame@ruby-lang.org
Actions