From: Joel VanderWerf Date: 2009-04-25T08:00:45+09:00 Subject: Re: ARGV, STDIN and gets Joe Williams wrote: > I am running into an issue where I have a script that takes two command > line arguments and reads from stdin. It seems that gets is not getting > to stdin because it is hitting ARGV first > (http://www.ruby-doc.org/core/classes/Kernel.html#M005996). Is there a > way around this so that I can pass in arguments and listen on stdin as > well. Running the script without args works perfectly. What I am doing > currently looks something like the following: > > var1 = ARGV[0] > var2 = ARGV[1] > var3 = gets > > Any advice would be helpful. > > Thanks. > -Joe Kernel#gets reads from ARGF, which, if there's anything in ARGV, is read from those files. So you can clear from ARGV first, if you want the option of passing your file as the 3rd arg instead of stdin. $ cat tt.rb var1 = ARGV.shift var2 = ARGV.shift var3 = gets p [var1, var2, var3] $ cat data this is some text $ ruby tt.rb foo bar data ["foo", "bar", "this is some text\n"] $ ruby tt.rb foo bar type some input ["foo", "bar", "type some input\n"] -- vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407