From: Heesob Park Date: 2009-07-25T15:49:25+09:00 Subject: [ruby-core:24559] Re: Expected change in behavior for ARGF.eof? Hi, 2009/7/25 Mike Kasick : > Hi folks, > > I originally asked this question in ruby-talk:342383, but the lack of > significant response suggests to me that it's a bit esoteric. > > Anyways, is the following an expected change in behavior between Ruby 1.8.7 > and Ruby 1.9.1p0? ��It seems to also hold for the latest 1.9.2 svn trunk. > > $ echo foo > /tmp/foo > $ ruby1.8 -e 'p ARGF.eof?' /tmp/foo > false > $ ruby1.9 -e 'p ARGF.eof?' /tmp/foo > true > I guess it is a bug of 1.9.x. Here is a patch for 1.9.1-p243 --- io.c 2009-07-15 20:57:55.000000000 +0900 +++ io.c.new 2009-07-25 15:38:04.000000000 +0900 @@ -8040,7 +8040,7 @@ static VALUE argf_eof(VALUE argf) { - if (ARGF.current_file) { + if (!NIL_P(ARGF.current_file)) { if (ARGF.init_p == 0) return Qtrue; ARGF_FORWARD(0, 0); if (rb_io_eof(ARGF.current_file)) { > Also, is there a way to advance ARGF to the next (in ARGV) file once EOF > for the current file has been reached? > In my test, ARGF.gets advanced ARGF to the next file in ARGV Try with $ ruby -e 'loop do;s=ARGF.gets;break if s.nil?;puts s;end' /tmp/foo /tmp/bar Regards, Park Heesob