# File lib/standard/facets/shellwords.rb, line 37
  def parse(argv, opts)
    argv = (String === argv ? shellwords(argv) : argv.to_a.dup)
    args = []
    while argv.any?
      item = argv.shift
      flag = opts[item]
      if flag
        # Work around lambda semantics in 1.8.7.
        arity = [flag.arity, 0].max
        # Raise if there are not enough parameters
        # available for the flag.
        if argv.size < arity
          raise ArgumentError
        end
        # Call the lambda with N items from argv,
        # where N is the lambda's arity.
        flag.call(*argv.shift(arity))
      else
        # Collect the items that don't correspond to
        # flags.
        args << item
      end
    end
    args
  end