5 use Devel::GlobalDestruction ();
7 use Variable::Magic ();
14 $wiz = Variable::Magic::wizard
15 data => sub { $_[1] },
17 Carp::cluck "get fired";
18 Variable::Magic::dispell ${$_[0]}, $wiz;
22 return if Devel::GlobalDestruction::in_global_destruction();
27 if (ref $self->{other_side} && $self->{other_side}{reference}) {
29 Scalar::Util::refaddr($self->{other_side}{reference})
30 eq Scalar::Util::refaddr($self)
33 $self->{other_side}{reference} = $self;
34 Variable::Magic::cast $self->{other_side}{reference}, $wiz;
35 delete $self->{other_side};
42 my $far = $near->{reference} = bless({ other_side => $near }, 'Foo');
43 warn $near->{reference};
45 Scalar::Util::weaken($near->{reference});
48 warn $near->{reference};
49 warn $near->{reference};
50 Scalar::Util::weaken($near->{reference});
51 warn $near->{reference};