sub path_to_op { my ( $root, $tgt ) = @_; local $op = $root; local @path; '' =~ /(?: (?(?{ my $name = $op->oldname; local $op = $op->parent; local @path = ( @path, "$name/" ); })(?=)|(?!)) | (?(?{ my $name = $op->oldname; local $op = $op->sibling; local @path = ( @path, "...," ); })(?=)|(?!)) ) * (?(?{ $$op == $$tgt })(?=)|(?!)) /x; @path; }