> My sample worked OK *after* I removed the Data::Dumper > print; apparently, it has some issues w/ circular > references as well (I tried setting Deepcopy and > Purity, to no avail); I suspect its due to the fact > that references to shared elements don't have the same > stringified value, so it doesn't actually look like > a circular ref.
Oh, yes. That's part of what I reported here: http://rt.perl.org/rt3/Public/Bug/Display.html?id=37946 The following highlights the problem: use strict; use warnings; use threads; use threads::shared; my $x; $x = \$x; share($x); print("Look at \$x:\n"); print($x, "\n"); print($$x, "\n"); print($$$x, "\n"); print($$$$x, "\n"); print($$$$$x, "\n"); print($$$$$$x, "\n"); my @q :shared = ($x); my $y = $q[0]; print("\nFirst look at \$y:\n"); print($y, "\n"); print($$y, "\n"); print($$$y, "\n"); print($$$$y, "\n"); print($$$$$y, "\n"); print($$$$$$y, "\n"); print("\nSecond look at \$y:\n"); print($y, "\n"); print($$y, "\n"); print($$$y, "\n"); print($$$$y, "\n"); print($$$$$y, "\n"); print($$$$$$y, "\n"); This outputs: Look at $x: REF(0x144f8f0) REF(0x144f8f0) REF(0x144f8f0) REF(0x144f8f0) REF(0x144f8f0) REF(0x144f8f0) First look at $y: SCALAR(0x1423c70) SCALAR(0x1423ad8) SCALAR(0x14bd968) SCALAR(0x14bd980) SCALAR(0x14bd998) SCALAR(0x14bd9b0) Second look at $y: REF(0x1423c70) REF(0x1423ad8) REF(0x14bd968) REF(0x14bd980) REF(0x14bd998) SCALAR(0x14bd9b0) Seems to me that this is a bug. It shows that threads::shared isn't detecting that it's dealing with a circular reference. With each level that the app traverses, threads::shared "unrolls" another version of the shared variable.