sub _isRefd { my( $_son, $hvSeen )= @_; $hvSeen ||= {}; return 0 # Let first call decide, since we've if $hvSeen->{0+$_son}++; # circled back to ourselves. return 1 if $_son->{refs}; my $dads= $_son->{dads}; for my $_dad ( @$dads ) { return 1 if $_dad->isRefd($hvSeen); } return 0; }