![]() |
|
We don't bite newbies here... much | |
PerlMonks |
Re: Oh where has my memory gone?by radiantmatrix (Parson) |
on Jun 09, 2008 at 20:27 UTC ( [id://691091]=note: print w/replies, xml ) | 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 effectively1 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
Updates:
<–radiant.matrix–>
Ramblings and references “A positive attitude may not solve all your problems, but it will annoy enough people to make it worth the effort.” — Herm Albright I haven't found a problem yet that can't be solved by a well-placed trebuchet
In Section
Seekers of Perl Wisdom
|
|