Jeff Abrahamson on 13 Dec 2004 01:28:47 -0000 |
Hmm. Originally I had written $unique_sets{$sets{$s}} = 1; I guess that made one copy and now I make two copies. What I want to do is keep referring to the same object. Is there an easy idiom for this? I had thought references would do it. The point is that I have a set of hash references. From time to time I realize that two of them, h1 and h2, really should be the same, so I coalesce their data into h1 and then set h2 = h1. (Recall that they are references to hashes, not hashes.) I'm probably thinking overly C-like. Here's the fuller code section that shows me doing what I just said. The key part is the block beginning with the comment "union of sets". my %sets = (); for my $v (keys %V) { $sets{$v} = [$v]; } for my $v_begin (keys %E) { my $adj = $E{$v_begin}; for my $v_end (keys %{$adj}) { if($sets{$v_begin} != $sets{$v_end}) { # union of sets my %s1 = %{$sets{$v_begin}}; my %s2 = %{$sets{$v_end}}; for my $key (keys %s1) { $s2{$key} = 1; } $sets{$v_begin} = $sets{$v_end}; # set pointers equal } } } my %unique_sets; for my $s (keys %sets) { print $sets{$s}, "\n"; $unique_sets{$sets{$s}} = $sets{$s}; print $sets{$s}, "\n"; } -Jeff On Sun, Dec 12, 2004 at 07:59:27PM -0500, Eric Roode wrote: > [62 lines, 224 words, 1590 characters] Top characters: es_\nto>r > > No, you have two different references to the same array. This line: > > $unique_sets{$sets{$s}} = $sets{$s}; > > makes a copy of the reference, not a copy of the array to which the reference > points. > > HTH > > Quoting Jeff Abrahamson <jeff@purple.com>: > > > Notice how I appear to have two different arrays with base address > > 0x8522038. Does this make sense to anyone here? > > > > DB<64> @k=keys %unique_sets > > > > DB<65> $k=$k[0] > > > > DB<66> x $k > > 0 'ARRAY(0x8522038)' > > DB<67> x $sets{$s} > > 0 ARRAY(0x8522038) > > 0 'jpw' > > DB<68> x @{$k} > > empty array > > DB<69> x $unique_sets{$k} > > 0 ARRAY(0x8522038) > > 0 'jpw' > > DB<70> > > > > A snippet of the underlying code is this: > > > > my %unique_sets; > > for my $s (keys %sets) { > > print $sets{$s}, "\n"; > > $unique_sets{$sets{$s}} = $sets{$s}; > > print $sets{$s}, "\n"; > > } > > > > -- > > Jeff > > > > Jeff Abrahamson <http://www.purple.com/jeff/> +1 215/837-2287 > > GPG fingerprint: 1A1A BA95 D082 A558 A276 63C6 16BF 8C4C 0D1D AE4B > > > > A cool book of games, highly worth checking out: > > http://www.amazon.com/exec/obidos/ASIN/1931686963/purple-20 > > > > > -- > Eric > > ___________________________________________________________________ > > Privacy Notice: This message has been sent via www.zoemail.net using > patented e-mail protection technology developed by AT&T Labs. Reply to > the "keyed address" above to ensure delivery. > > - > **Majordomo list services provided by PANIX <URL:http://www.panix.com>** > **To Unsubscribe, send "unsubscribe phl" to majordomo@lists.pm.org** -- Jeff Jeff Abrahamson <http://www.purple.com/jeff/> +1 215/837-2287 GPG fingerprint: 1A1A BA95 D082 A558 A276 63C6 16BF 8C4C 0D1D AE4B A cool book of games, highly worth checking out: http://www.amazon.com/exec/obidos/ASIN/1931686963/purple-20 Attachment:
signature.asc
|
|