My understanding of scope must be broken. I've got a small app with several subroutines, one of which reads in very large amounts of data into a hash. The data in question is a reference to a hash, averaging 25-30k keys. The values are themselves references to hashes containing seven or eight key/values. Two of those values average about 50 bytes, and the others average about ten.
This data is used only within the scope of said sub, and *should* go away once the scope of the sub has ended. Right? Watching the process with top, I can see it slowly eat up memory while going through an iteration of the sub (it is called 3 times), but not release anything once it proceeds to the next iteration.
I know there isn't really any way to "free()" memory in perl, since it does all the garbage collection, but shouldn't it release the now unused memory once the sub's scope has ended? With only three loops, this thing chews up almost 300MB of memory.
I'm using 'use vars ...' and 'use strict' to ensure that everything is correctly scoped. There are only two variables in global scope, one a short scalar and the other a three element array. Everything else is scoped within its given sub (via my). Is there anything else I can do?