From: "prijutme4ty (Ilya Vorontsov)" Date: 2013-03-18T21:53:00+09:00 Subject: [ruby-core:53503] [ruby-trunk - Bug #7537] OptionParser treats negative digits as options Issue #7537 has been updated by prijutme4ty (Ilya Vorontsov). Sent a pull-request. https://github.com/ruby/ruby/pull/259 I've made changes the same way as python do -- http://docs.python.org/dev/library/argparse.html#arguments-containing 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). ---------------------------------------- Bug #7537: OptionParser treats negative digits as options https://bugs.ruby-lang.org/issues/7537#change-37695 Author: prijutme4ty (Ilya Vorontsov) Status: Assigned Priority: Normal Assignee: nobu (Nobuyoshi Nakada) Category: lib 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 OptionParser.new {|opts| opts.on('-p','--pvalue VAL', Integer, 'P-value') {|v| puts "P-value: #{v}" } }.parse! `ruby my_test.rb -p -1` works normally But if I use it as optional argument of an option: OptionParser.new {|opts| opts.on('-p','--pvalue [VAL]', Integer, 'P-value') {|v| puts "P-value: #{v}" } }.parse! `ruby my_test.rb -p -1` fails with "Invalid option -1" Also I can't use it as non-optional argument OptionParser.new {|opts| opts.on('-n', 'no Pvalue argument, other arguments only') {} }.parse! puts ARGV `ruby my_test.rb -1` also fails with "Invalid option -1" -- http://bugs.ruby-lang.org/