Strange ruby problem

C

christoforever

So i've cut the program down to about 4 lines to give the idea of
whats going on:

num = ARGV[0]
num2 = ARGV[1]
puts " #{num} #{num2} \n"
line = gets


if i give the program some input from the command line it fails and
sais " gets: No such file or directory -1"
yet if i supply no input the program goes straight to gets. This seems
fairly strange to me. Though when I did this:

num = ARGV[0]
num2 = ARGV[1]
puts " #{num} #{num2} \n"
STDOUT.flush
line = STDIN.gets

everything works normal. Why is this and whats going on? Thanks in
advance

Sincerely,
Chris Dancy
 
G

G.Durga Prasad

[Note: parts of this message were removed to make it a legal post.]

try without the last line, line = gets

On Wed, Sep 24, 2008 at 7:49 PM, (e-mail address removed) <
 
G

G.Durga Prasad

[Note: parts of this message were removed to make it a legal post.]

The program is trying to read from ARGV[0] , and there is no file with the
name ARGV[0] that you have given.

On Wed, Sep 24, 2008 at 7:49 PM, (e-mail address removed) <
 
E

Eric I.

So i've cut the program down to about 4 lines to give the idea of
whats going on:

num = ARGV[0]
num2 = ARGV[1]
puts " #{num} #{num2} \n"
line = gets

if i give the program some input from the command line it fails and
sais " gets: No such file or directory -1"
yet if i supply no input the program goes straight to gets. This seems
fairly strange to me. Though when I did this:

num = ARGV[0]
num2 = ARGV[1]
puts " #{num} #{num2} \n"
STDOUT.flush
line = STDIN.gets

everything works normal. Why is this and whats going on? Thanks in
advance

I think we need to see your command-line arguments and whether you're
putting them before the name of the Ruby script or after. Are you
invoking the script like:

ruby script.rb arg1 arg2

or:

ruby arg1 arg2 script.rb

because the first is what you should be doing. Alternatively, do you
have RUBYOPT set or do you invoke any arguments on your #! line (if
you're on a Unix-like system).

Eric

====

LearnRuby.com offers Rails & Ruby hands-on public & on-site workshops.
Ruby Fundamentals Workshop Oct 8-10 Ann Arbor, Mich.
(Note: Great Lakes Ruby Bash in Ann Arbor on Oct. 11; attend both!)
Please visit http://LearnRuby.com for all the details.
 
R

Robert Klemme

So i've cut the program down to about 4 lines to give the idea of
whats going on:

num = ARGV[0]
num2 = ARGV[1]
puts " #{num} #{num2} \n"
line = gets


if i give the program some input from the command line it fails and
sais " gets: No such file or directory -1"
yet if i supply no input the program goes straight to gets. This seems
fairly strange to me. Though when I did this:

num = ARGV[0]
num2 = ARGV[1]
puts " #{num} #{num2} \n"
STDOUT.flush
line = STDIN.gets

everything works normal. Why is this and whats going on? Thanks in
advance

As others have said: arguments are the problem. "gets" tries to read
from ARGF which is basically all ARGV values interpreted as files and
concatenated as streams. You typically use this for poor man's cat:

ruby -e 'ARGF.each {|line| puts line}' foo bar baz

You can avoid the issue by doing

num = ARGV.shift
num2 = ARGV.shift
puts num, num2
line = gets

Cheers

robert
 
T

Todd Benson

As others have said: arguments are the problem. "gets" tries to read from
ARGF which is basically all ARGV values interpreted as files and
concatenated as streams. You typically use this for poor man's cat:

ruby -e 'ARGF.each {|line| puts line}' foo bar baz

You can avoid the issue by doing

num = ARGV.shift
num2 = ARGV.shift
puts num, num2
line = gets

Cheers

robert

As robert says.

I ran into this just the other day. ARGV has to be clear (empty), for
stdin to work for gets. (Pickaxe 2nd Ed., p. 180)

Todd
 
W

William James

So i've cut the program down to about 4 lines to give the idea of
whats going on:

num = ARGV[0]
num2 = ARGV[1]
puts " #{num} #{num2} \n"
line = gets

if i give the program some input from the command line it fails and
sais " gets: No such file or directory -1"
yet if i supply no input the program goes straight to gets. This seems
fairly strange to me. Though when I did this:

num = ARGV[0]
num2 = ARGV[1]
puts " #{num} #{num2} \n"
STDOUT.flush
line = STDIN.gets

everything works normal. Why is this and whats going on? Thanks in
advance

Sincerely,
Chris Dancy

Arguments on the command line are assumed
to be files to be read by "gets".

E:\>echo First line of file > temp.txt

E:\>ruby -e "p gets" temp.txt
"First line of file \n"

Correct programs:

num = ARGV.shift
num2 = ARGV.shift
puts " #{num} #{num2}"
line = gets


num = ARGV[0]
num2 = ARGV[1]
puts " #{num} #{num2}"
line = $stdin.gets
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,770
Messages
2,569,584
Members
45,075
Latest member
MakersCBDBloodSupport

Latest Threads

Top