Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister
 
PerlMonks  

Re^2: %+ and cloning

by PetaMem (Priest)
on Jan 11, 2010 at 12:30 UTC ( [id://816710]=note: print w/replies, xml ) Need Help??


in reply to Re: %+ and cloning
in thread %+ and cloning

Thanks for your insight.

So I went back to twig technology and copied the hash via
sub copy_hash { my $hr = shift // return {}; # get hash to copy or return empty ha +shref if not given my %copy = (); while (my ($k, $v) = each %{$hr}) { $copy{$k} = $v; } return \%copy; }

Which works. So this is it? Best way to go?

Bye
 PetaMem
    All Perl:   MT, NLP, NLU

Replies are listed 'Best First'.
Re^3: %+ and cloning
by BrowserUk (Patriarch) on Jan 11, 2010 at 13:04 UTC

    A simple my %copy = %+; is equivalent to your sub. However, that may not be enough!

    According to the docs for Tie::Hash::NamedCapture, the values of the tied hash can contain an array reference holding multiple captures due to the re-use of the same named capture. In which case you might need to use something more complex to perform a deep copy operation.

    That said, in my simple tests, this doesn't seem to apply to %+. It does apply to %- though.


    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.
      It happens if the tie happens with parameters all => 1, but %+ is tied without them. So even if your tests were less simple, you shouldn't have seen it with %+ (and if you ever do, there's a bug).
Re^3: %+ and cloning
by JavaFan (Canon) on Jan 11, 2010 at 12:40 UTC
    That depends on ones definition of 'best'. One could also write:
    sub copy_hash { my $hr = shift // return {}; my $copy; @$copy{keys %$hr} = value %$hr; $copy; }
    or just:
    sub copy_hash {{%{$_[0]//{}}}}
    Or without a sub:
    my %copy = %+;

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://816710]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others having an uproarious good time at the Monastery: (4)
As of 2024-03-29 01:45 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found