Issue #13094 has been updated by Yui NARUSE. たしかにFileとZlib::GzipReaderでeof?の挙動が違いますね。 Fileの方にあわせるべきかなぁ……。 さておき、現状こうなってしまっていますし、修正は2.5からだと思うのでgetsの戻り値で分岐した方がよいでしょうね。 ---------------------------------------- Bug #13094: Zlib::GzipReader eof?がfalseなのにgetsでnilが返ってくる https://bugs.ruby-lang.org/issues/13094#change-62361 * Author: Hironao TSUTSUMIDA * Status: Open * Priority: Normal * Assignee: * Target version: * ruby -v: ruby 2.4.0preview2 (2016-09-09 trunk 56129) [x86_64-darwin15] * Backport: 2.2: UNKNOWN, 2.3: UNKNOWN, 2.4: UNKNOWN ---------------------------------------- 下記のように、eof?がfalseであればgetsでnilが返ってくることはないことを期待してるとエラーが起きてしまいます。 zlibでeof?は非推奨でしょうか? ~~~ ruby require 'zlib' o = ('!'..'~').to_a i = 225 1000.times do Zlib::GzipWriter.open('./s.gz') do |gz| i.times do gz.write(o.sample(10)*""+"\n") end end Zlib::GzipReader.open("./s.gz") { |gz| puts gz.gets.chomp! until gz.eof? } puts "#{i}, #{File.size('./s.gz')}" if File.size('./s.gz') > 2058 i -= 1 else i += 1 end end ~~~ ~~~ ruby -:10:in `block (2 levels) in <main>': undefined method `chomp!' for nil:NilClass (NoMethodError) from -:10:in `open' from -:10:in `block in <main>' from -:4:in `times' from -:4:in `<main>' ~~~ ---Files-------------------------------- s.gz (2.01 KB) -- https://bugs.ruby-lang.org/ Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe> <http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>