#!perl -T use strict; use warnings; use Test::More tests => 11; use Variable::Magic qw/wizard cast getdata/; our $destroyed; { package Variable::Magic::TestDestructor; sub new { bless { }, shift } sub DESTROY { ++$::destroyed } } sub D () { 'Variable::Magic::TestDestructor' } { local $destroyed = 0; my $w = wizard data => sub { $_[1] }; { my $obj = D->new; { my $x = 1; cast $x, $w, $obj; is $destroyed, 0; } is $destroyed, 0; } is $destroyed, 1; } { local $destroyed = 0; my $w = wizard data => sub { $_[1] }; { my $copy; { my $obj = D->new; { my $x = 1; cast $x, $w, $obj; is $destroyed, 0; $copy = getdata $x, $w; } is $destroyed, 0; } is $destroyed, 0; } is $destroyed, 1; } { local $destroyed = 0; { my $obj = D->new; { my $w = wizard set => $obj; { my $x = 1; cast $x, $w; is $destroyed, 0; } is $destroyed, 0; } is $destroyed, 0; } is $destroyed, 1; }