Path: | lib/getopts.rb |
Last Update: | Tue Jan 17 18:02:17 +0000 2012 |
getopts.rb - $Release Version: $ $Revision: 11708 $ $Date: 2007-02-13 08:01:19 +0900 (Tue, 13 Feb 2007) $ by Yasuo OHBA(SHL Japan Inc. Technology Dept.)
— this is obsolete; use getoptlong
2000-03-21 modified by Minero Aoki <aamine@dp.u-netsurf.ne.jp>
2002-03-05 rewritten by Akinori MUSHA <knu@ruby-lang.org>
getopts is obsolete. Use GetoptLong.
# File lib/getopts.rb, line 24 24: def getopts(single_options, *options) 25: boolopts = {} 26: valopts = {} 27: 28: # 29: # set defaults 30: # 31: single_options.scan(/.:?/) do |opt| 32: if opt.size == 1 33: boolopts[opt] = false 34: else 35: valopts[opt[0, 1]] = nil 36: end 37: end if single_options 38: 39: options.each do |arg| 40: opt, val = arg.split(':', 2) 41: 42: if val 43: valopts[opt] = val.empty? ? nil : val 44: else 45: boolopts[opt] = false 46: end 47: end 48: 49: # 50: # scan 51: # 52: c = 0 53: argv = ARGV 54: 55: while arg = argv.shift 56: case arg 57: when /\A--(.*)/ 58: if $1.empty? # xinit -- -bpp 24 59: break 60: end 61: 62: opt, val = $1.split('=', 2) 63: 64: if opt.size == 1 65: argv.unshift arg 66: return nil 67: elsif valopts.key? opt # imclean --src +trash 68: valopts[opt] = val || argv.shift or return nil 69: elsif boolopts.key? opt # ruby --verbose 70: boolopts[opt] = true 71: else 72: argv.unshift arg 73: return nil 74: end 75: 76: c += 1 77: when /\A-(.+)/ 78: opts = $1 79: 80: until opts.empty? 81: opt = opts.slice!(0, 1) 82: 83: if valopts.key? opt 84: val = opts 85: 86: if val.empty? # ruby -e 'p $:' 87: valopts[opt] = argv.shift or return nil 88: else # cc -ohello ... 89: valopts[opt] = val 90: end 91: 92: c += 1 93: break 94: elsif boolopts.key? opt 95: boolopts[opt] = true # ruby -h 96: c += 1 97: else 98: argv.unshift arg 99: return nil 100: end 101: end 102: else 103: argv.unshift arg 104: break 105: end 106: end 107: 108: # 109: # set 110: # 111: $OPT = {} 112: 113: boolopts.each do |opt, val| 114: $OPT[opt] = val 115: 116: sopt = opt.gsub(/[^A-Za-z0-9_]/, '_') 117: eval "$OPT_#{sopt} = val" 118: end 119: valopts.each do |opt, val| 120: $OPT[opt] = val 121: 122: sopt = opt.gsub(/[^A-Za-z0-9_]/, '_') 123: eval "$OPT_#{sopt} = val" 124: end 125: 126: c 127: end