Argument Error

H

Hd Pwnz0r

Hi.

I'm learning Ruby and I want to know how to make a script have an
argument, i.e.

ruby script.rb 3 2

So far I have this:

abort "Correct syntax is ruby [script].rb [number to exponentially
multiply by] [exponent]" unless ARGV.size == 2
var = gets.chomp
var2 = gets.chomp
puts (var.to_i ** var2)

It's a simple exponential calculator.

I get this error when trying to run it with 2 arguments (2 and 3).

exponent.rb:2:in `gets': No such file or directory - 2 (Errno::ENOENT)
from exponent.rb:2:in `gets' from exponent.rb:2:in `<main>'

Attachments:
http://www.ruby-forum.com/attachment/4895/exponent.rb
 
J

Jesús Gabriel y Galán

Hi.

I'm learning Ruby and I want to know how to make a script have an
argument, i.e.

ruby script.rb 3 2

So far I have this:

abort "Correct syntax is ruby [script].rb [number to exponentially
multiply by] [exponent]" unless ARGV.size =3D=3D 2
var =3D gets.chomp
var2 =3D gets.chomp

You have the program arguments in the ARGV array, as you probably
know, since you've used it in the previous line:

var =3D ARGV[0].to_i
var2 =3D ARGV[1].to_i

(I've added the to_i, since it seems you want to use them as numbers)
puts =A0(var.to_i ** var2)

It's a simple exponential calculator.

I get this error when trying to run it with 2 arguments (2 and 3).

exponent.rb:2:in `gets': No such file or directory - 2 (Errno::ENOENT)
from exponent.rb:2:in `gets' =A0 =A0 =A0 =A0from exponent.rb:2:in `<main>=
'

Jesus.
 
J

James Harrison

Hi.
=20
I'm learning Ruby and I want to know how to make a script have an
argument, i.e.
=20
ruby script.rb 3 2
=20
So far I have this:
=20
abort "Correct syntax is ruby [script].rb [number to exponentially
multiply by] [exponent]" unless ARGV.size =3D=3D 2
var =3D gets.chomp
var2 =3D gets.chomp
puts (var.to_i ** var2)
=20
It's a simple exponential calculator.
=20
I get this error when trying to run it with 2 arguments (2 and 3).
=20
exponent.rb:2:in `gets': No such file or directory - 2 (Errno::ENOENT)
from exponent.rb:2:in `gets' from exponent.rb:2:in `<main>'
=20
=20

gets reads from an IO stream, not the arguments on the command line:

http://ruby-doc.org/core/classes/IO.html#M002272

The arguments on the command line are stored in the ARGV array. That's =
why you check ARGV's size to verify that there are only 2 arguments.

So the code should read the options out of the ARGV array, not trying to =
gets things. There are a couple of ways to do this. My favourite looks =
like:

var =3D ARGV.shift
var2 =3D ARGV.shift

A couple of more complicated ways, but more flexible ways, of getting =
command line arguments are optionparser and getopts. I typically use =
getopts, with no real rationale behind it than that I learned it that =
way first.
 

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

Forum statistics

Threads
473,774
Messages
2,569,596
Members
45,142
Latest member
DewittMill
Top