Actually, the Scrape::USPS::ZipLookup modules appear to take an address and reformat it to the USPS "standardized" address layout. It doesn't take a zip and return the city/state or take a city/state and return a zip.
I looked up the Scrape::USPS::ZipLookup module while doing research for this zipcode/address lookup post a while back.
Oddly, Scrape::USPS::ZipLookup are supposed to be a group of modules that are contained in the Data::Address::Standardize distribution, but they really aren't in the distribution. ZipLookup can be grabbed here.