in reply to any way to control a memory leak

You probably don't have a "leak" in the traditional C programing sense. More likely, you have some lexical variables that you're putting large amounts of data into. Lexicals do go out of scope, but Perl holds onto their memory as an optimization in case they need it again. This means that if you stuff 32K into a lexical, it will stay 32K (actually even bigger) for the life of your program.

One thing you can try is an explicit undef on any lexicals holding large amounts of data. This is supposed to release the memory back to the general pool for Perl (although not back to the OS on most systems). Also, make sure you are using references whenever passing around large chunks of data to subroutines.

You may be having problems because of your DBD driver. I've seen some versions of DBD::Oracle exhibit bad behavior in terms of memory, mostly due to the constantly changing OCI libraries they depend on. You might want to try stripping out the DBI stuff (or replacing it with dummy calls) and seeing if that makes your memory problem go away. There are configuration parameters you can tweak if this is the problem.