sub Node::climb_up { my ($self, $proc) = @_; my ($magic, @return); my $return = sub { @return = @_; die \$magic; }; while ($self) { eval { @return = $proc->($self, $return); $self = $self->parent_row; }; if ($@) { last if ($@ eq \$magic); die $@; } } return @return; }