I don't like code that updates a global value when it's not necessary. I like to be able to see, easily, where information comes from. This results in more maintainable code (you know where to look when something goes wrong).

That said, I'd rewrite your populate_hash to return a hash, or better still (for performance reasons), a reference to a hash. You then set %top_level to the return value of that subroutine. It's as easy as having the first line of the sub be:

sub populate_hash { my %hash; # populate hash \%hash; }

Note this returns a reference to a hash, which means you have to get a little fancier when you call the subroutine (or modify your code to work with the hash reference, but I foresee less hair-pulling if you keep the hash).

my %top_level = % { populate_hash() };

The "extra" %{} parts tell the interpreter that it should set %top_level to the hash which the return value of populate_hash refers to.

I swear that makes sense in some language. =) For more on references, see perldoc perlref and perldoc perlreftut. Once you get the hang of working in references, you see all sorts of new solutions to data-manglement.

HTH

perl -e 'print "How sweet does a rose smell? "; chomp ($n = <STDIN>); +$rose = "smells sweet to degree $n"; *other_name = *rose; print "$oth +er_name\n"'

In reply to Re: I know this code could be better... by arturo
in thread I know this code could be better... by derek3000

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.