# File lib/optconfig.rb, line 210
  def parse!(argv=[])
    orig_argv_size = argv.size
    ret = []
    @options.each_key do |k|
      @options[k].value = @options[k].default
    end
    @specified.clear
    parse_file @file if @file
    @specified.clear

    until argv.empty?
      arg = argv.shift
      case arg
      when "--"
        ret.concat argv
        break
      when /\A--[a-zA-Z0-9_]/
        parse_long_opt arg.sub(/\A--/, ""), argv
      when /\A-[a-zA-Z0-9]/
        parse_short_opt arg.sub(/\A-/, ""), argv
      else
        ret.push arg
        if @stop_at_non_option_argument
          ret.concat argv
          break
        end
      end
    end

    if @obsolete_behavior
      n = orig_argv_size - ret.size
      argv.replace ret
      return n
    end
    argv.replace ret
    return argv
  end