I understand that if I want a function to have access to a static variable, without that variable cluttering global namespace, I can do the following:

{ my $static = "Persistant"; sub mytest { return $static; } } print mytest(), "\n";

This works because even though $static has fallen out of scope in the outtermost block (the file, in this case), it is still in scope whenever the subroutine is called, because the sub was declared (and defined, in this case) where the scope is still active. Essentially, though the program's execution continues past the close of $static's scope, it never gets reaped because its block is still relevant to the globally declared sub, 'mytest'.

But what if I want the function definition, and whatever clutter it took to derive the value stored in $static, to appear at the bottom of the script, somewhere after my use of mytest() in print mytest(), "\n";?

If, for reasons of asthetic style, I prefer to have the main execution block at the top, and subroutine definitions at the bottom (which works fine unless I'm trying to maintain a static, non-global variable for a sub), is there no way to satisfy both my sense of asthetics, and function at the same time by allowing the definition of functions that use static variables, and their surrounding blocks which give scope to their static variables, to appear later on?

Dave

"If I had my life to do over again, I'd be a plumber." -- Albert Einstein


In reply to Static function variables without top declaration? by davido

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • 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:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.