Hi Monks,

I noticed in node 310766 that you can pass different variables through to a sub.. all good and useful stuff.

But when I tried to pass a hash through by reference it only worked one way.

I assume its because I have defined a local hash to be equal to the referenced hash.. but I thought 'by ref' meant it would link directly to the original hash not use a copy of it.

How do you pass a hash (or anything) into a sub, work on it, and have the original effected?

use strict; use Data::Dumper; my %bits; $bits{'zero'}='start element'; &loader('something',\%bits); print 'Result:'.Dumper(\%bits); sub loader{ # loads values into hash.. my $tail = shift; my %h_ref = %{+shift}; print 'In sub:'.Dumper(\%h_ref); $h_ref{'one'}='thing_'.$tail; $h_ref{'two'}='thong_'.$tail; print 'After add:'.Dumper(\%h_ref); }
Output:
In sub:$VAR1 = { 'zero' => 'start element' }; After add:$VAR1 = { 'zero' => 'start element', 'two' => 'thong_something', 'one' => 'thing_something' }; Result:$VAR1 = { 'zero' => 'start element' };
Thanks,
___ /\__\ "What is the world coming to?" \/__/ www.wolispace.com

In reply to Passing hashes by reference by wolis

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.