So, I was just wondering if Perl has a similar "limit" (ie. the result
of "its" hash function is always n bits).
In the Perl 5.8.6 hv.h, you can see:
#ifdef PERL_HASH_INTERNAL_ACCESS
#define PERL_HASH_INTERNAL(hash,str,len) \
STMT_START { \
register const char *s_PeRlHaSh_tmp = str; \
register const unsigned char *s_PeRlHaSh = (const unsigned char *)s_PeRlHaSh_tmp; \
register I32 i_PeRlHaSh = len; \
register U32 hash_PeRlHaSh = PL_rehash_seed; \
while (i_PeRlHaSh--) { \
hash_PeRlHaSh += *s_PeRlHaSh++; \
hash_PeRlHaSh += (hash_PeRlHaSh << 10); \
hash_PeRlHaSh ^= (hash_PeRlHaSh >> 6); \
} \
hash_PeRlHaSh += (hash_PeRlHaSh << 3); \
hash_PeRlHaSh ^= (hash_PeRlHaSh >> 11); \
(hash) = (hash_PeRlHaSh + (hash_PeRlHaSh << 15)); \
} STMT_END
#endif
which is used most of the time (there's also a PERL_HASH macro which
is slower, but with the same data types) in hv.c.
This seems, to my still-bleeding eyes, to say that the actual hash is
an unsigned 32-bit value and hence the answer to your question is 32.
If I've misunderstood something, please let me know

I haven't done
C in ages.
Ted