accept variable number of args and return a hash