instance method OptionParser#order

order(argv, into: nil) -> [String][permalink][rdoc][edit]
order(argv, into: nil) {|s| ...} -> [String]
order(*args, into: nil) -> [String]
order(*args, into: nil) {|s| ...} -> [String]

与えられた argv を順番にパースします。オプションではないコマンドの引数(下の例で言うと somefile)に出会うと、パースを中断します。 argv からオプションを取り除いたものを返します。

ブロックが与えられている場合は、パースを中断せずに引数をブロックに渡してブロックを評価し、パースを継続します。argv を返します。

下の例で言うと、コマンドの引数 somefile よりも後ろにオプションを置くことができません。-b もコマンドのオプションではない引数として扱われてしまいます。

[PARAM] argv:
パースしたい引数を文字列の配列で指定します。
[PARAM] args:
パースしたい引数を順に文字列として与えます。
[PARAM] into:
オプションを格納するハッシュを指定します。指定したハッシュにはオプションの名前をキーとして、OptionParser#onに渡されたブロックの値が格納されます。キーの名前はロングオプションが定義されていればロングオプションの値を、ショートオプションのみの場合はショートオプションの値から、先頭の "-" を除いてシンボル化した値が使用されます。
[EXCEPTION] OptionParser::ParseError:
パースに失敗した場合、発生します。実際は OptionParser::ParseError のサブクラスになります。
opt.rb

require 'optparse'
opt = OptionParser.new

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

opt.order(ARGV)
p ARGV

$ ruby opt.rb -a foo somefile -b
:a
["-a", "foo", "somefile", "-b"]