... I can string all those calls to MailPush in a ksh for loop and memory usage never goes above 8M ...
Well, then do that! I'm sorry, but I at least need more information.
- top! See how many processes are running at a time, and how much memory they each use. Since you are using system() everywhere, you should never have more than two processes: perl and whatever's in the system() (plus the extra shell that system() gives you).
- top combined with perl -d should let you find the exact point where the system bogs down.
- How about some of this logit() output? If logit() is timestamped, it could be useful.
- Include $! in your log messages after a system(); this will explain the -1s.
- Did the original script suffer from this problem?
- What are these files' names and how do they get called? Which is the library and which are the scripts?