I'm pretty sure, as the parent mentioned, that theoretic collisionness is impossible with |input-domaim| > |output-domain| bc of the pigeonhole principle. Especially so when input has no maximum size.
However perfect it is, it can only guarantee no collisions if the size of the strings you're hashing is equal or lower than the hash size.
In this house, we obey the pigeonhole principle.
It can do better, if the input is not "every possible string." A perfect hash of the strings representing 32-bit unsigned integers can compress strings up to 10 bytes long into 4 bytes of data.
Sure, there is a pretty severe limitation for perfect hash functions: you have to know all the possible keys in advance.
That's rarely the case.