[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Is there a clash between gets and ARGV?

ycsunil

2/20/2008 9:04:00 AM

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
2 Answers

Sebastian Hungerecker

2/20/2008 9:15:00 AM

0

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)
> =A0 =A0 =A0 =A0 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=20
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
=2D-=20
Jabber: sepp2k@jabber.org
ICQ: 205544826

Robert Klemme

2/20/2008 1:15:00 PM

0

2008/2/20, Sebastian Hungerecker <sepp2k@googlemail.com>:
> 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).

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

--
use.inject do |as, often| as.you_can - without end