But whenever you NEED circular references, be sure to use
use Scalar::Util qw(weaken);
and:
weaken( $self->{parent} = $parent );
so there is no reference count, and as soon the parent object is destroyed, the child is cleaned up by the garbage collector.