Well, the first answer is a good one. Let me explain it a bit. You have this code inside manager():
sleep(2);
&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
- As shmem explains below, it's not really implemented as a jump; however, the effect is so similar that the difference is unimportant for this convsersation. Still -- thanks to shmem for the clarification.
Updates:
- 20080611 : altered language, see footnote 1
<–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
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
| |
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.