5 use Devel::GlobalDestruction ();
7 use Variable::Magic ();
14 $wiz = Variable::Magic::wizard
15 data => sub { $_[1] },
17 Carp::cluck "get fired";
18 Scalar::Util::weaken($_[1]->{reference}{other_side} = ${$_[0]});
19 Scalar::Util::weaken($_[1]->{reference});
20 Variable::Magic::dispell ${$_[0]}, $wiz;
24 return if Devel::GlobalDestruction::in_global_destruction();
25 Carp::cluck "DESTROY\n";
29 if (ref $self->{other_side} && $self->{other_side}{reference}) {
31 Scalar::Util::refaddr($self->{other_side}{reference})
32 eq Scalar::Util::refaddr($self)
35 $self->{other_side}{reference} = $self;
36 Variable::Magic::cast(
37 $self->{other_side}{reference}, $wiz, $self->{other_side}
39 delete $self->{other_side};
46 my $far = $near->{reference} = bless({ other_side => $near }, 'Foo');
47 warn $near->{reference};
49 Scalar::Util::weaken($near->{reference});
52 my $copy = $near->{reference};
54 warn Scalar::Util::isweak($near->{reference});
55 warn $near->{reference};
56 warn $near->{reference};