This has been bugging me for weeks now, intermittently.
By all accounts I’ve read, this getoptlong code should work
require ‘getoptlong’
opts = GetoptLong.new(
[“–devel”,“-d”,GetoptLong::NO_ARGUMENT],
[“–getpass”,“-g”,GetoptLong::NO_ARGUMENT],
[“–debug”,“-D”,GetoptLong::NO_ARGUMENT],
[“–verbose”,“-V”,GetoptLong::NO_ARGUMENT]
)
server = ‘http://192.168.10.16/’
verbose = false
opts.each { |o,a| p o }
opts.each { |o,a|
case o
when ‘–devel’
server = ‘http://192.168.20.56/’
when ‘–getpass’
puts “this option does nothing”
when ‘–debug’: $DEBUG = true
when ‘–verbose’: verbose = true
end
}
p server
p $DEBUG
p verbose
This is the output I expect when I run it:
“–devel”
“–debug”
“–verbose”
“http://192.168.20.56/”
true
true
This is the output I get:
“–devel”
“–debug”
“–verbose”
“http://192.168.10.16/”
false
false
What am I missing?
2006/3/7, Matt R. [email protected]:
["--debug","-D",GetoptLong::NO_ARGUMENT],
when '--getpass'
“–debug”
“–verbose”
“http://192.168.10.16/”
false
false
What am I missing?
Insert a “p a” in the second opts.each block and see what happens.
Kind regards
robert
On Tue, 7 Mar 2006, Matt R. wrote:
["--debug","-D",GetoptLong::NO_ARGUMENT],
when '--getpass'
“–debug”
“–verbose”
“http://192.168.10.16/”
false
false
What am I missing?
harp:~ > diff -ubB a.rb.org a.rb
— a.rb.org 2006-03-07 07:56:07.000000000 -0700
+++ a.rb 2006-03-07 07:58:12.000000000 -0700
@@ -9,7 +9,7 @@
server = ‘http://192.168.10.16/’
verbose = false
-opts.each { |o,a| p o }
+#opts.each { |o,a| p o }
opts.each { |o,a|
case o
when ‘–devel’
harp:~ > ruby – a.rb --debug --devel --verbose
“http://192.168.20.56/”
true
true
each is destructive - as most argv parsers are.
hth.
-a
On Wed, 8 Mar 2006, [email protected] wrote:
server = ‘http://192.168.10.16/’
true
true
each is destructive - as most argv parsers are.
Oh, fer cryin’ out loud I’m an idiot.
hth.
Certainly did. Thanks.
On Wed, 8 Mar 2006, Matt R. wrote:
each is destructive - as most argv parsers are.
Oh, fer cryin’ out loud I’m an idiot.
welcome to the club!
-a
Matt R. [email protected] writes:
What am I missing?
GetoptLong::each as well as GetoptLong::get consume the options. After
the first opts.each{…} your opts are emtpy.
The docs don’t mention that, I think. I also had those troubles when I
used opts.get == nil to check if no options were given.
Perhaps you should have a look at the optparse module in the stdlib.
Regards,
Tassilo