Hello List, 
To explain the problem I am having, I wrote a simple snipet that doesn't do 
anything meaningful other than illustrating the behaviour I want to avoid:

my %hoh = (
            1 => {
                a => 5, b => 5
                },

            2 => 5
           );


my @res = &RANDOMSUB;  #call a random subroutine

print "$hoh{1}{a}  $hoh{2} \n";


sub RANDOMSUB {
    my %hohcopy = %hoh;

    $hohcopy{1}{a} = 2;
    $hohcopy{2} = 2;
}

>From my understanding since in the subroutine I am working with a local hash 
%hohcopy all the values assigned to it have no meaning in the main body. 
However the print produces 2, 5 instead of the desired 5, 5. As far as my 
understanding goes this is due to the fact that $hohcopy{1} holds a 
reference to $hoh{1} instead of recreating it's internal structure entirely 
from the root to the leaves while performing a copy. 

The question is whether there is an elegant way to produce a complete copy 
of a hash-of-hashes-of-hashes-...-of-hashes for internal subroutine purposes 
and make sure that all references will be translated properly as well, 
leaving the subroutine no ability to modify the main hash. 

Thank you.

Peter

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to