2009年4月14日火曜日

ARGV

Rubyの話です。

何気なく、ARGVの処理で毎回毎回

ARGV.each { |opt|
case opt
when "-t"
...
}


とか書くのはなんか美しくない(?)とか思ってRubyのAPIを探ってみると

optparse::チュートリアル

というのがきちんと用意されていました。(さすがAPIの用意が周到すぎる。)

詳しくは、上記のサイトを見ればわかると思うのですが、例として適当なプログラムを示しておきます。


#!/usr/bin/ruby
require 'optparse' #optionsを使うために必要

ARGV.options do |opt|
opt.on('-a', '-b') { |v| p v } #複数指定も可能
#[VAL]とすると、-bがあった場合、引数は
#どっちでもよいことになる。(vにはtrueが入る)
opt.on('-c [VAL]') { |v| p v }
#VALとすると、-cがあった場合、引数は必須。
#(ないと、missing argumentsと中断はしないが警告がでる。)
opt.on('-d VAL') {|v| p v }
opt.on('--ee'){ |v| p v } #ロングオプションも可能。
#実際にコマンドラインのパースを行う
#*上記以外の引数が与えられると、invalid optionと警告がでる。
#(プログラムは終了しない)
opt.parse!
end

#以下を実行すると、無効な引数が指定された場合、
#UsageOptionsがでて、プログラムの実行が強制中断される。
ARGV.parse!

p "OK"
p ARGV

exit(0)


実行結果:

% ./test.rb -a -b -c CALLC -d CALLD --ee
true
true
"CALLC"
"CALLD"
true
"OK"
[]

% ./test.rb -a -c -g -h -k
true
nil
test: invalid option: -g
Usage: test [options]
-a, -b
-c [VAL]
-d VAL
--ee

% ./test.rb -a -c -d
true
nil
test: missing argument: -d
"OK"
[]


これを使うと特に何も意識しなくても引数指定プログラムが簡単にできるということを初めて知りました。調べるものだなぁ。

0 件のコメント: