package Bar::Foo; use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS); @ISA = qw( Bar ); %OWNER = (); %ITERATORS = (); sub new { my $pkg = shift; my $self = Barc::new_Foo(@_); bless $self, $pkg if defined($self); } sub DESTROY { return unless $_[0]->isa('HASH'); my $self = tied(%{$_[0]}); return unless defined $self; delete $ITERATORS{$self}; if (exists $OWNER{$self}) { Barc::delete_Foo($self); delete $OWNER{$self}; } } *AllVariants = *Barc::Foo_AllVariants; sub DISOWN { my $self = shift; my $ptr = tied(%$self); delete $OWNER{$ptr}; } sub ACQUIRE { my $self = shift; my $ptr = tied(%$self); $OWNER{$ptr} = 1; }