sub circ_ref { my $dad = {}; my $son = {}; $dad->{son} = $son; $son->{dad} = $dad; Scalar::Util::weaken $son->{dad}; return $dad; } my $dad = circ_ref(); # All is well my $son = circ_ref()->{son}; # Doh! Who's your daddy? print Data::Dumper::Dumper $dad, $son;