Abigail-II mentioned that you should reduce the number of hashes you are using. Another option is to use arrays instead of hashes. You can do some funkiness under the hood to try and maximize each array (as an array pre-allocates to like 50 elements at a time).
One option is to create an object that uses an array as its implementation. I have a version and I'm sure that CPAN does, as well. You can go ahead and make it one big array for all the objects, having the class keep track of where each object starts in the super-array. There's a bit of funkiness to it, but it's definitely do-able. (/msg me if you want more info)
------
We are the carpenters and bricklayers of the Information Age.
Don't go borrowing trouble. For programmers, this means Worry only about what you need to implement.