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