Declaring hash structures within subs that get repeatedly called is a common problem. Another solution that allows the hash to be declared on demand (if the sub may or may not be called this is good) but still only be called once is to use a closure like this:

{ my %hash; sub my_sub { unless (%hash) { %hash = ( blah ); } } } # %hash is not accessible here, this is a different one my %hash...

Doing it this way makes %hash private to the sub as the my delaration localises it to the bare block where it is accessible to the sub but not main:: per se. You start the sub by checking if the hash is populated. On the first call to the sub it will not be so you set it. From then on it will populated so you don't need to set it again during subsequent calls to the sub. Perl retains a reference to it between calls to the sub so it never gets garbage collected.

cheers

tachyon

s&&rsenoyhcatreve&&&s&n.+t&"$'$`$\"$\&"&ee&&y&srve&&d&&print


In reply to Re: Re: Re: Re: Re: Z80 Assembler -> Hex Opcode by tachyon
in thread Z80 Assembler -> Hex Opcode by Elgon

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.