There is a limit - your memory, virtual and physical. 700,000 elements is a lot. You should probably use a dbm module, like
DB_File, to store the hash on disk and read it from there - not keeping the whole thing in memory.
Due to the way hashes are implemented they usually take up a lot of space, probably more than is needed to store 700,000 elements in your case, i guess. This is because hashes perform some manipulation on the key, and then end up with an index to store in the table. If all the keys end up distributed pretty far from one another, there's a lot of space left unused, but still allcated.
Perl's builtin
tie function lets you access data using hashes, arrays or scalars, but with the internals differring, so that you may, for example, crss your memory limits. Examples can be found in the above mentioned module, aswell as more reference in
AnyDBM_File.
-nuffin
zz zZ Z Z #!perl