Gets give me last arg of script?

something i don’t understand : gets give me last arg of script ???

here is part of my script :


def get_respons
return (/^[y|Y|O|o].*/ === gets.to_s.chomp)
end

dir_path=Dir.pwd
dir_path=$[0] if $.length == 1
puts “Are you sure you want to convert #{dir_path} ?[y|Y|O|o/n] default
to NO”
if get_respons
puts “reponse YES”
end

and the script (being in my $PATH) is called from terminal :

set_date /Users/yvon

and the message error i get is :

set_date /Users/yvon
Are you sure you want to convert /Users/yvon ?[y|Y|O|o/n] default to NO
nil
/Users/yvon/bin/set_date:7:in gets': Is a directory - /Users/yvon (Errno::EISDIR) from /Users/yvon/bin/set_date:7:inget_reponse’
from /Users/yvon/bin/set_date:17

line 7 being “return (/^[y|Y|O|o].*/ === gets.to_s.chomp)”
and 17 the call to “get_respons” : “if get_respons”

notice the $*[0] is allready used in my script ???

On Aug 12, 2006, at 6:15 AM, Une bévue wrote:

    from /Users/yvon/bin/set_date:7:in `get_reponse'
    from /Users/yvon/bin/set_date:17

line 7 being “return (/^[y|Y|O|o].*/ === gets.to_s.chomp)”
and 17 the call to “get_respons” : “if get_respons”

notice the $*[0] is allready used in my script ???

une bévue

Kernel#gets (what you get when you just use gets) calls ARGF.gets.
ARGF is a magic IO object that lets your script have a cli api
similar to apps like ‘cat’. You can check the docs for details, but
basically what you want to use is $stdin.gets or STDIN.gets not plain
old gets

“U” == Une bévue [email protected] writes:

U> something i don’t understand : gets give me last arg of script ???

It’s normal : it make the right thing.

moulon% ri Kernel#gets
------------------------------------------------------------ Kernel#gets
gets(separator=$/) => string or nil

 Returns (and assigns to +$_+) the next line from the list of files
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 in +ARGV+ (or +$*+), or from standard input if no files are present
 ^^^^^^^^^^^^^^^^^^
 on the command line. Returns +nil+ at end of file. The optional

[…]
moulon%

U> notice the $*[0] is allready used in my script ???

This is bad : $ variables must not be used, it’s best to use ARGV.

ARGV[0] is used but was not removed from ARGV

Try this

moulon% ruby -e ‘p ARGV[0]; p gets’ inexistant
“inexistant”
-e:1:in `gets’: No such file or directory - inexistant (Errno::ENOENT)
from -e:1
moulon%

moulon% ruby -e ‘p ARGV.shift; p gets’ inexistant
“inexistant”
Bonjour
“Bonjour\n”
moulon%

Guy Decoux

Logan C. [email protected] wrote:

Kernel#gets (what you get when you just use gets) calls ARGF.gets.
ARGF is a magic IO object that lets your script have a cli api
similar to apps like ‘cat’. You can check the docs for details, but
basically what you want to use is $stdin.gets or STDIN.gets not plain
old gets

ok fine thanks :wink:

Le 12 août 06 à 15:50, ts a écrit :

ARGV[0] is used but was not removed from ARGV

Try this

moulon% ruby -e ‘p ARGV[0]; p gets’ inexistant
[…]

moulon% ruby -e ‘p ARGV.shift; p gets’ inexistant

ok, fine thanks, that’s clear !