{ my %register; sub DESTROY { my $self=shift; delete $_->{$self} foreach values %register; } sub __register_inside_out { my $ref=shift; $register{$ref}=$ref; } } { __register_inside_out(\(my %property)); sub property { my $self=shift; if (@_) { $property{$self}=shift; return $self; } return $property{$self}; } }