2011年6月20日月曜日

Rubyのoptparseでgccみたいなオプションを取る

やりたいことは、これ。
./hoge source -o output
sourceにオプションスイッチが無いのがミソ。

options = {
  :input => $stdin,
  :output => $stdout
}

optp = OptionParser.new
optp.on("-o outputfile", String) {|out_filename|
  options[:output] = File.open(out_filename, 'w')
}

remain_opts = optp.permute(ARGV)
if (remain_opts.size > 1)
  raise "Invalid input count."
elsif (remain_opts.size == 1)
  options[:input] = File.open(remain_opts[0], 'r')
end                                                   
OptionParser#parseでなくて、OptionParser#permuteを使う。