Brilliant! Thanks much for the explain-o. It wasn't my code, but I learned a lot anyway. ara.t.howard / noaa.gov wrote: > On Tue, 28 Mar 2006, Eric Armstrong wrote: > >> ara.t.howard / noaa.gov wrote: >>> gets is a method of IO and it does read from piped input. >>> however, there is a magic variable called ARGF which is the list of >>> all files on the command line, or stdin if none are given. so 'cat', >>> in ruby could be written as >>> >>> ARGF.each{|line| print line} >>> >> So far, so good. Makes perfect sense. >> What is more perplexing is that the formula for console I/O >> would look like this: >> >> puts prompt_string >> STDIN.gets --succeeds? >> >> Why would standard input work there, but fail in this case: >> >> puts prompt_string >> gets --fails? >> >> If no file is specified on the command line, why doesn't that >> invocation gets do the same thing as STDIN.gets? > > ruby doesn't know that you didn't mean to say to read the file '60', > which is > on the command line. > > when you use ARGF, deliberately or not, you telling ruby that ANY > command line > argument can be opened are read from. in your case you gave '60' and this > file does not exist. your code will work if you parse the command line > first: > > harp:~ > cat a.rb > print ARGF.read > > harp:~ > echo 42|ruby a.rb 60 > a.rb:1:in `read': No such file or directory - 60 (Errno::ENOENT) > from a.rb:1 > > > harp:~ > cat a.rb > ARGV.shift > print ARGF.read > > harp:~ > echo 42|ruby a.rb 60 > 42 > > > regards. > > -a