Bug #7537

OptionParser treats negative digits as options

Added by prijutme4ty (Ilya Vorontsov) over 5 years ago. Updated over 4 years ago.

Target version:
ruby -v:
1.9.3(p0, p327 both)


Is it intentional that negative digits are treated as options?
If I use negative digit as an argument of an option, it is treated as a number {|opts|
opts.on('-p','--pvalue VAL', Integer, 'P-value') {|v| puts "P-value: #{v}" }

ruby my_test.rb -p -1 works normally

But if I use it as optional argument of an option: {|opts|
opts.on('-p','--pvalue [VAL]', Integer, 'P-value') {|v| puts "P-value: #{v}" }

ruby my_test.rb -p -1 fails with "Invalid option -1"

Also I can't use it as non-optional argument {|opts|
opts.on('-n', 'no Pvalue argument, other arguments only') {}
puts ARGV

ruby my_test.rb -1 also fails with "Invalid option -1"

259.patch (10.2 KB) 259.patch zzak (Zachary Scott), 04/05/2013 11:38 AM


#1 [ruby-core:50715] Updated by prijutme4ty (Ilya Vorontsov) over 5 years ago

In my opinion, negative numbers shouldn't be treated as option keys unless it was explicitly specified. In other cases them should be treated as usual parameters.

#2 [ruby-core:50726] Updated by zzak (Zachary Scott) over 5 years ago

  • Category set to lib
  • Assignee set to nobu (Nobuyoshi Nakada)

#3 [ruby-core:51048] Updated by usa (Usaku NAKAMURA) over 5 years ago

  • Status changed from Open to Assigned

#4 [ruby-core:53503] Updated by prijutme4ty (Ilya Vorontsov) about 5 years ago

Sent a pull-request.
I've made changes the same way as python do --
This patch introduces one possible (but not very serious and very rare) incompatibility: if one already uses explicitly defined negative-digit option such as '-1' and also uses an option with optional argument '-p [ARG]' and runs a command with options '-p -1' then before patch it'll be treated as two different options '-p', '-1' and after patch they are treated as an option '-p' with value '-1'.
If one meets this problem, he can use option declaration with equal sign: '-p=[ARG]' or just change places of arguments and run his program with options '-1 -p'.
But I suppose not too many people use explicitly defined numeric options and even less people use optional argument with them in such order (may be even nobody use it such a way).

Also, if possible, backporting into 1.9 of this patch will be very useful. Unfortunately I don't know how should I do this.

#5 [ruby-core:54009] Updated by zzak (Zachary Scott) about 5 years ago

I've attached the patch from the associated pull request.

#6 [ruby-core:57167] Updated by prijutme4ty (Ilya Vorontsov) over 4 years ago

Any thoughts about this patch?

Also available in: Atom PDF