Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much

Re^2: %+ and cloning

by PetaMem (Priest)
on Jan 11, 2010 at 12:30 UTC ( #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?

    All Perl:   MT, NLP, NLU

Replies are listed 'Best First'.
Re^3: %+ and cloning
by BrowserUk (Pope) 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?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://816710]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others about the Monastery: (3)
As of 2018-06-18 01:10 GMT
Find Nodes?
    Voting Booth?
    Should cpanminus be part of the standard Perl release?

    Results (107 votes). Check out past polls.