def go(s, args = ARGV)
b, v = s.scan(/(.)(:?)/).inject([ {}, {} ]) { |t, (o, a)|
a = a == ':'
t[a ? 1 : 0][o] = a ? nil : false
t
}
while a = args.shift
a !~ /\A-(.+)/ and args.unshift a and break
p = $1
until p == ''
o = p.slice!(0, 1)
if v.key?(o)
if p == '' then
a = args.shift or break 1
else
a = p
end
if v[o].nil?
a = a.dup
a.extend EnumerableExtension
a.push a
v[o] = a
else
v[o].push a
end
break
elsif b.key?(o)
if b[o] == false
b[o]= 1
else
b[o] += 1
end
else
args.unshift a
break 1
end
end and break
end
b.merge(v)
end