The backslash creates a reference to the hash, rather than passing the actual hash. This is useful to separate two hashes that you are passing at the same time -- and is also recommendable for arrays.

If you pass two arrays to a subroutine without making references, what the subroutine actually sees is one big array combining the two, and your subroutine would have to "know" how to split them apart. The same would apply with hashes.

Since you've passed them as references, they will be scalar variables when they arrive at the subroutine, and you will have to de-reference them with the % or @ funny symbol.

process($path, \%seen, \%total); sub process { my ($path, $seen, $total) = @_; my %totalhash=%{$total}; ... }

In reply to Re: why a by mpolo
in thread why is a "\" needed before a hash in my subroutine call? by slok

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.