requires=
classes=OptionParser=Arguable,OptionParser,OptionParser=ParseError,OptionParser=AmbiguousOption,OptionParser=NeedlessArgument,OptionParser=MissingArgument,OptionParser=InvalidOption,OptionParser=InvalidArgument,OptionParser=AmbiguousArgument
methods=Kernel/c.ARGV.optparse
sublibraries=optparse.date,optparse.shellwords,optparse.time,optparse.uri
is_sublibrary=false

ޥɥ饤Υץ갷Υ饤֥Ǥ

=== optparse::塼ȥꥢ

optparse Ȥ硢Ūˤ

 (1) OptionParser ֥ opt 롣
 (2) ץ갷֥å opt Ͽ롣
 (3) opt.parse(ARGV) ǥޥɥ饤ºݤ parse 롣

Ȥ褦ήˤʤޤ

 * [[ref:optiondef]]
 * [[ref:optionarg]]
 * [[ref:longoption]]
 * [[ref:help]]
 * [[ref:subcmd]]
 * [[ref:argv]]
 * [[ref:hyphen_start_file]]

====[a:optiondef] ץ

ʲϥץ -a, -b դ륳ޥɤǤ

        require 'optparse'
        opt = OptionParser.new

        opt.on('-a') {|v| p v }
        opt.on('-b') {|v| p v }

        opt.parse!(ARGV)
        p ARGV

        ruby sample.rb -a foo bar -b baz
        # => true
             true
             ["foo", "bar", "baz"]

on() ᥽åɤΰǥץꤵ줿ν
֥åǵҤޤ֥åΰˤϥץ󤬻ꤵ줿Ȥ
 true Ϥޤ([[ref:optionarg]]ι⻲)

Enumerable#each ʤɤȰ㤤on() ᥽åɤƤФ줿Ǥϥ֥åϼ¹Ԥޤ
ޤϿǤ
parse ƤФ줿ˡޥɥ饤˥ץ󤬻ꤵƤм¹Ԥޤ

ץλϥޥɤľǤɬפϤޤ(ǡ-b ϥץ
ǧƤ)Ķѿ POSIXLY_CORRECT Ƥ
εưѹޤ

        env POSIXLY_CORRECT=1 ruby ./sample.rb -a foo bar -b baz
        # => true                               # -a ϥץȲ
             ["foo", "bar", "-b", "baz"]        # -b 󥪥ץȲ

parse! ˤꡢޥɥ饤(ARGV)βϤԤޤ
parse! ǤϡARGV 饪ץ󤬼ޤ
򤱤ˤ parse Ȥޤ

        require 'optparse'
        opt = OptionParser.new

        opt.on('-a') {|v| p v }
        opt.on('-b') {|v| p v }

        # parse() ξ硢ARGVѹʤ
        # ץ̤ argv ꤵ롣
        argv = opt.parse(ARGV)

        p argv

Ƥʤץꤹ㳰 [[c:OptionParser::InvalidOption]] 
ȯޤ

        ruby ./sample.rb -c
        /usr/local/lib/ruby/1.9/optparse.rb:1428:in `complete': invalid option: -c (OptionParser::InvalidOption)
                from /usr/local/lib/ruby/1.9/optparse.rb:1426:in `catch'
                from /usr/local/lib/ruby/1.9/optparse.rb:1426:in `complete'
                from /usr/local/lib/ruby/1.9/optparse.rb:1287:in `order!'
                from /usr/local/lib/ruby/1.9/optparse.rb:1256:in `catch'
                from /usr/local/lib/ruby/1.9/optparse.rb:1256:in `order!'
                from /usr/local/lib/ruby/1.9/optparse.rb:1336:in `permute!'
                from /usr/local/lib/ruby/1.9/optparse.rb:1363:in `parse!'
                from /usr/local/lib/ruby/1.9/optparse.rb:1356:in `parse'
                from ./sample.rb:9

OptionParser ΤϡɤΥץ󤬻ꤵ줿򵭲ޤ
νǡץˤȽǤäˤϡ
¾Υƥʤ˳Ǽޤ

        require 'optparse'
        opt = OptionParser.new

        OPTS = {}

        opt.on('-a') {|v| OPTS[:a] = v }
        opt.on('-b') {|v| OPTS[:b] = v }

        opt.parse!(ARGV)
        p ARGV
        p OPTS

        ruby sample.rb -a foo bar -b baz
        # => ["foo", "bar", "baz"]
             {:a=>true, :b=>true}

====[a:optionarg] ץΰ

on() ᥽åɤΥץ˲񤯤ȡΥץ
ϰդ뤳ȤλȤʤޤ

        require 'optparse'
        opt = OptionParser.new

        opt.on('-a VAL') {|v| p v }         # <- " VAL" ɲ
        opt.on('-b') {|v| p v }

        opt.parse!(ARGV)
        p ARGV

        ruby sample.rb -a foo bar -b baz

        # => "foo"
             true
             ["bar", "baz"]

ץνδϡ֥إפθɤɤʤ褦˽񤯡פǤ
ץΰά㳰 [[c:OptionParser::MissingArgument]] ȯޤ

        ruby ./sample.rb -a
        /usr/local/lib/ruby/1.9/optparse.rb:455:in `parse': missing argument: -a (OptionParser::MissingArgument)
                from /usr/local/lib/ruby/1.9/optparse.rb:1295:in `order!'
                from /usr/local/lib/ruby/1.9/optparse.rb:1256:in `catch'
                from /usr/local/lib/ruby/1.9/optparse.rb:1256:in `order!'
                from /usr/local/lib/ruby/1.9/optparse.rb:1336:in `permute!'
                from /usr/local/lib/ruby/1.9/optparse.rb:1363:in `parse!'
                from ./sample.rb:7

ץΰɬܤǤʤȤ򼨤ˤϡ" [" դޤ

        require 'optparse'
        opt = OptionParser.new

        opt.on('-a [VAL]') {|v| p v }          # <- [VAL] ɲ
        opt.on('-b') {|v| p v }

        opt.parse!(ARGV)
        p ARGV

        ruby sample.rb -a

        # => nil
             []

Ʊͤˡإפθɤɤ褦 "VAL]" ղäƤޤ

硼ȥץΰϻȤˤΤǡΤ褦ʾϥ
ץȤ狼䤹Ǥ㤨С嵭ξ硢-ab 
ꤹ -a b Ȳᤵޤ-a ʤǽʤ -a -b 
ᤵޤ

====[a:longoption] 󥰥ץ

󥰥ץ on() ΰ '--'ǻϤޤ륪ץꤷޤ

        require 'optparse'
        opt = OptionParser.new

        opt.on('-a', '--foo') {|v| p v }
        opt.on('--bar') {|v| p v }

        opt.parse!(ARGV)
        p ARGV

        ruby sample.rb -a foo bar --bar baz
        # => true
             true
             ["foo", "bar", "baz"]

--[no-]...ʤɤȤ뤳Ȥǡ귿Υץꤹ뤳ȤǤޤ

        require 'optparse'
        opt = OptionParser.new

        opt.on('-a', '--foo') {|v| p v }
        opt.on('--[no-]bar') {|v| p v }

        opt.parse!(ARGV)
        p ARGV

        ruby sample.rb -a foo bar --bar baz --no-bar
        # => true
             true
             false                              # <- --no-bar λˤ롣
             ["foo", "bar", "baz"]

ץФǤޤ硼ȥץƱ
GNUδˤ碌

        opt.on('-a', '--foo=VAL') {|v| p v }
        opt.on('--[no-]bar[=VAL]') {|v| p v }

 "=" ȤΤɤȻפޤ

ץꤹϡɤΥץ󤫰դ˷ޤĹޤǻꤹ
ɤǤ

        require 'optparse'
        opt = OptionParser.new

        opt.on('-a', '--foo') {|v| p v }
        opt.on('--[no-]bar') {|v| p v }

        opt.parse!(ARGV)
        p ARGV

        ruby sample.rb --fo

Ǥϡ--fo ϡ--foo ꤷΤƱˤʤޤʤ --f 
ޤǾάǤޤ

====[a:help] إ

ǥեȤ --help  --version ץǧޤ

        ruby ./sample.rb --help
        # => Usage: sample [options]

        ruby ./sample.rb --version
        # => *Ϥʤ*

--version ϡȥåץ٥ Version ƤȽϤޤ
(ͥ٤㤤 VERSION ⻲ȤޤRuby ΥС򼨤 VERSION
 ruby 1.8 ޤǤƤΤ)

        require 'optparse'
        opt = OptionParser.new
        Version = "1.2.3"       # opt.version = "1.2.3"
        opt.parse!(ARGV)

        ruby ./sample.rb --version
        # => sample 1.2.3

on ΰˤΥץä --help νϤȿǤޤ

        require 'optparse'
        opt = OptionParser.new

        opt.on('-a', 'description of -a') {|v| p v }
        opt.on('-b', 'description of -b') {|v| p v }

        opt.parse!(ARGV)
        p ARGV
        
        ruby ./sample.rb --help
        # => Usage: sample [options]        
                -a                               description of -a
                -b                               description of -b


====[a:subcmd] ֥ޥ
ʲ cvs  svn Τ褦˥֥ޥɤ᤹Ǥ
  
    #! /usr/bin/ruby
    # contributed by Minero Aoki.
    
    require 'optparse'
    
    parser = OptionParser.new
    parser.on('-i') { puts "-i" }
    parser.on('-o') { puts '-o' }
    
    subparsers = Hash.new {|h,k|
      $stderr.puts "no such subcommand: #{k}"
      exit 1
    }
    subparsers['add'] = OptionParser.new.on('-i') { puts "add -i" }
    subparsers['del'] = OptionParser.new.on('-i') { puts "del -i" }
    subparsers['list'] = OptionParser.new.on('-i') { puts "list -i" }
    
    parser.order!(ARGV)
    subparsers[ARGV.shift].parse!(ARGV) unless ARGV.empty?

¹ԤȰʲΤ褦ˤʤޤ

    $ ruby subcom.rb -i add -i
    -i
    add -i
    
    $ ruby subcom.rb list -i
    list -i

[[m:OptionParser#order!]] ץǤϤʤ
ޥɤΰ˽в񤦤ȤǥѡǤ뤳ȤѤƤޤ

====[a:argv] ARGV εǽ
optparse  require  ARGV  [[c:OptionParser::Arguable]] εǽ
äޤʲνǤ褦ˤʤޤ
[[m:OptionParser::Arguable#getopts]] ϥץݻ Hash ֤ޤ
  # sample.rb 
  require 'optparse'
  params = ARGV.getopts("a:b:", "foo", "bar:")
  p params
 sample.rb ¹Ԥ
  $ ruby sample.rb -a 1 --foo --bar xxx
  {"a"=>"1", "b"=>nil, "foo"=>true, "bar"=>"xxx"}
Τ褦ˤʤޤ

====[a:hyphen_start_file] '-'ǻϤޤե̾

'-'ǻϤޤե̾򥳥ޥɤϤϰʲΤ褦˴֤"--"򶴤ߤޤ

      $ ruby sample.rb -- -file

"-file" ץǤϤʤȤƲᤵޤ
 POSIX.2  getopt(3) ͳ褷ޤ"--" ʹߤϤ٤ƥץǤϤʤȤƲᤵޤ
