sub add_node { my $self = shift; my $node = shift; return if is_duplicate( $node ); # do nothing for dups # proceed to add node to the set of nodes for this tree } #### sub add_node { my $self = shift; my $node = shift; return $self->{ N }{ $node->id } ||= $node; } #### $tree->add_node( Node->new( $some_random_object, $id ) ); #### sub { my $node = shift; return "$node" } #### sub add_node { my $self = shift; my $node = shift; my $id = get_id( $node ); return $self->{ N }{ $id } ||= $node; } sub get_id { my $self = shift; my $node = shift; my $id_fxn = $self->id_fxn; return $id_fxn( $node ); } #### sub get_id { my $self = shift; my $node = shift; # $node->isa( 'Node' ) return ref $node && $node->can( 'id' ) ? $node->id : $self->id_fxn->( $node ); }