From: mame@... Date: 2015-05-24T05:53:56+00:00 Subject: [ruby-dev:48994] [Ruby trunk - Bug #11177] [Open] DATAでEOF文字以降が読めない Issue #11177 has been reported by Yusuke Endoh. ---------------------------------------- Bug #11177: DATAでEOF文字以降が読めない https://bugs.ruby-lang.org/issues/11177 * Author: Yusuke Endoh * Status: Open * Priority: Normal * Assignee: * ruby -v: ruby 2.2.2p95 (2015-04-13 revision 50295) [x64-mingw32] * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN ---------------------------------------- 遠藤です。 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 -- https://bugs.ruby-lang.org/