Jerry D. Hedden wrote: > 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.
The more I think about it, the more I'm convinced this needs to be fixed. The original variable $x is a circular reference, and it's finiteness is detectable. The copy made to $y has become an infinitely deep reference with lazy evaluation.