sub Node::climber { my $p = shift; return sub { return $p = $p->parent_row }; } # dann ... my $climber = $node->climber; while ( my $node = $climber->() ) { # ... }