Is there a clash between gets and ARGV?

Hello all,

Here is my small ruby program:

if (ARGV[0] == ‘add’)
puts ‘input something’
gt = gets
puts gt
else
puts ‘fail’
end

If I try to execute above program am getting below error:

C:\Documents and Settings\sunilc\Desktop>ruby test.rb ‘add’
input something
test.rb:3:in `gets’: No such file or directory - add (Errno::ENOENT)
from test.rb:3

Please let me know why is this error coming?

-Sunil

ycsunil wrote:

C:\Documents and Settings\sunilc\Desktop>ruby test.rb ‘add’
input something
test.rb:3:in `gets’: No such file or directory - add (Errno::ENOENT)
from test.rb:3

Please let me know why is this error coming?

Kernel#gets tries to read from the file specified by the command line
arguments if there are any. This is documented (and in some cases
useful).
If you don’t want this behaviour use IO#gets directly (as in:
STDIN.gets).

HTH,
Sebastian

2008/2/20, Sebastian H. [email protected]:

arguments if there are any. This is documented (and in some cases useful).
If you don’t want this behaviour use IO#gets directly (as in: STDIN.gets).

Alternatively the script can be fixed like this:

if (ARGV.shift == ‘add’)
puts ‘input something’
gt = gets
puts gt
else
puts ‘fail’
end

A more complex but also more robust alternative might be to process
command line options e.g. with OptionParser.

Kind regards

robert