Hi all, I want pass a hash to subroutine, is that possible

Yes. Usually you would just pass a reference.

sub myfunc { my $href = shift; print $href->{foo}, "\n"; } my %h = ( foo => 'bar' ); myfunc(\%h);

It is possible to pass the whole hash but it gets messy if you want to add arguments later. Some people handle named parameters this way. (Others prefer a hash ref for that too.)

sub myfunc { my %hash = @_; print $hash{foo}, "\n"; } my %h = ( foo => 'bar' ); myfunc(%hash); myfunc( foo => 'baz' );

There is one significant difference between these you should be aware of. In the first example, you are passing a reference to the hash itself. If you would change the hash via the reference within your sub, you would see those changes outside of your sub. In the second example, the line my %hash = @_; makes a copy of the hash. Changes to that copy inside the sub will not be seen outside of the sub. On the other hand, if you have a large hash, making a copy might take a lot of resources.

Edit: Added quote from OP.

-sauoq
"My two cents aren't worth a dime.";

In reply to Re: pass a hash to subroutine by sauoq
in thread pass a hash to subroutine by benlaw

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.