James Gray
1/4/2006 3:27:00 PM
On Jan 4, 2006, at 9:17 AM, Shea Martin wrote:
>
> <snip>
> if ARGV.size > 0
> puts "first arg is #{ARGV[0]}"
> end
> puts "enter text"
> ans = gets
> puts "you said #{ans}"
> </snip>
>
> 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
Hope that helps.
James Edward Gray II