From: Charles Oliver Nutter Date: 2009-10-26T12:27:52+09:00 Subject: [ruby-core:26309] Re: IO.foreach (and friends) effect on $< and $. On Sun, Oct 25, 2009 at 9:22 PM, Marc-Andre Lafortune wrote: > I believe there is a bug in trunk with $. but I am not certain how to > resolve it. > > Is there an official documentation for $. (and all other global > variables) in rdoc? > > The Ruby Prog Language (Flanagan & Matz) states: > > The number of the last line read from the current input file. > Equivalent to ARGF.lineno. > > I find "current input file" to be very imprecise. Is that the file > currently being read from ARGF? or the last IO read from? It is definitely imprecise, especially now considering that 1.8 and 1.9 do things differently > Currently, it's a bit of both. It's usually the last read io: > > $ rubydev -e "ARGF.gets; f=File.new '/etc/passwd'; 4.times{f.gets}; p > $., ARGF.lineno" /etc/hosts > 4 > 1 Results on my system; "ruby" is OS X 10.5 latest 1.8.6 version: ~/projects/jruby ��� ruby -e 'ARGF.gets; f=File.new "/etc/passwd"; 4.times{f.gets}; p $., ARGF.lineno' /etc/hosts 4 4 ~/projects/jruby ��� ruby1.8.7 -e 'ARGF.gets; f=File.new "/etc/passwd"; 4.times{f.gets}; p $., ARGF.lineno' /etc/hosts 4 4 ~/projects/jruby ��� ruby1.9 -e 'ARGF.gets; f=File.new "/etc/passwd"; 4.times{f.gets}; p $., ARGF.lineno' /etc/hosts 4 1 > Clearly, it is not equivalent to ARGF.lineno in this case. > > On the other hand, it's affected by ARGF.lineno= (contrary to any > other IO#lineno=), and vice-versa: > $ rubydev -e "ARGF.lineno = 42; p $.; $. = 56; p ARGF.lineno" > 42 > 56 Yes, this was confusing to me as well. I don't understand why these are intertwined. - Charlie