|Pathologically Eclectic Rubbish Lister|
Re: Oh where has my memory gone?by radiantmatrix (Parson)
|on Jun 09, 2008 at 20:27 UTC||Need Help??|
Well, the first answer is a good one. Let me explain it a bit. You have this code inside manager():
Every time a subroutine calls another subroutine, the stack grows. Each subroutine in the chain hangs onto whatever memory it has. When your stack gets big enough, you'll run out of memory or blow the stack -- both are fatal.
As an aside, you should really include use strict; use warnings; in your code -- you would have got a warning about deep recursion inside manager() long before you ran out of memory.
If you want to avoid this, you have two options: refactor your code so that manager() is just a loop, or use goto.
If you say goto &manager;, you're making a jump, not a call -- your stack remains constant.
Also, you should read perlvar, specifically the bits on my - variables that you only need inside of manager should be declared with that scope using my