From: Robert Klemme Date: 2006-01-05T02:13:03+09:00 Subject: Re: gets bug? James Edward Gray II wrote: > On Jan 4, 2006, at 9:17 AM, Shea Martin wrote: > >> >> >> if ARGV.size > 0 >> puts "first arg is #{ARGV[0]}" >> end >> puts "enter text" >> ans = gets >> puts "you said #{ans}" >> >> >> Run this code, as ./test.rb. Then run it with an command line arg, >> like "./test.rb -x". And you will get an error like this: >> >> "test.rb:3:in `gets': No such file or directory - -x >> (Errno::ENOENT)" >> >> The fix I have found, is to change gets to $stdin.gets. I saw some >> traffic on the mailing list archives regarding this, but no >> resolution. >> >> Is this expected behaviour? > > Yes it is. Kernel.gets() reads from files specified as command-line > options or STDIN, if none were given. This makes it easy to write > Unix-style filters. > > You can always shift the option out of ARGV before calling gets() > with something like: > > if ARGV.first == "-x" > ARGV.shift > # ... > end I'd prefer to use OptionParser.parse! for this - but otherwise totally agree. robert