in reply to Re^7: Combinations of lists, etc
in thread Combinations of lists to a hash
And further to your reply ... ;-)
plain printing of the references reveals that the last are identical objects
DB<61> @ra = ({a=>1, b=>2}, {a=>1, b=>2}); DB<62> print $_ for @ra HASH(0x35a4090)HASH(0x35a3ae8) # different IDs DB<63> @ra = ({a=>1, b=>2}) x 2; DB<64> print $_ for @ra HASH(0x35a3eb0)HASH(0x35a3eb0) # same IDs DB<65>
> Update: dd works by generating source code that will reproduce the structure of the data being dumped.
... when run thru eval .
There seems to be no better generic syntax to reproduce the case of duplicated references, than stuffing a fix placeholder string into it and fixing it later.
An for completeness, here code to clone the hashes instead of copying their refs
my $value = { a=>1, b=>2 }; # curly brackets to assign hashref! $hash{$_} = { %$value } for @keys; ### or alternatively my %value = ( a=>1, b=>2 ); # round brackets to assign list! $hash{$_} = { %value } for @keys;
this kind of cloning works because % returns a list in listcontext, which is packed again into a new { hash }
DB<78> x %$value 0 'a' 1 1 2 'b' 3 2 DB<79>
debugger demo
DB<72> x @keys 0 'Prefix1=A:b:1' 1 'Prefix1=A:b:2' 2 'Prefix1=A:c:1' 3 'Prefix1=A:c:2' DB<73> x $value = {a=>1, b=>2}; 0 HASH(0x35a48e8) 'a' => 1 'b' => 2 DB<74> $hash{$_} = { %$value } for @keys; DB<75> x \%hash 0 HASH(0x3598330) 'Prefix1=A:b:1' => HASH(0x35a50b8) 'a' => 1 'b' => 2 'Prefix1=A:b:2' => HASH(0x35a4c18) # <--- differing IDs 'a' => 1 'b' => 2 'Prefix1=A:c:1' => HASH(0x35a46a8) 'a' => 1 'b' => 2 'Prefix1=A:c:2' => HASH(0x35a4a50) 'a' => 1 'b' => 2 DB<77>
Cheers Rolf
(addicted to the Perl Programming Language :)
Wikisyntax for the Monastery
FootballPerl is like chess, only without the dice
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^9: Combinations of lists, etc
by AnomalousMonk (Archbishop) on Oct 07, 2019 at 17:48 UTC | |
by LanX (Saint) on Oct 07, 2019 at 18:40 UTC |