in reply to Hash Entry Deallocation

Well, for the specific question, use delete, which deletes elements from a hash. There's a limit to how much memory you'll get back as parts of the hash structure won't get freed, but the individual elements will. Looks like:
delete $foo{somekey};
For this specific problem, have you considered using File::Find instead? It will invoke a callback routine for each file so it doesn't have to pre-load in all the filenames and thus doesn't take nearly so much memory.