---
name: "Data::Grove::Parent"
section: "3pm"
platform: "linux"
package: "libxml-perl"
version: "0.08-9"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/Data::Grove::Parent"
---

# Data::Grove::Parent(3pm)

provide parent properties to Data::Grove objects

## NAME

Data::Grove::Parent - provide parent properties to Data::Grove objects

## SYNOPSIS

```
 use Data::Grove::Parent;
 $root = $object->root;
 $rootpath = $object->rootpath;
 $tied = $object->add_magic([ $parent ]);
 $node = Data::Grove::Parent->new($hash [, $parent]);
 $node_list = Data::Grove::ParentList->new($array [, $parent]);
```

## DESCRIPTION

Data::Grove::Parent is an extension to Data::Grove that adds \``"Parent"`' and \``"Raw"`' properties to Data::Grove objects and methods for returning the root node of a grove, a list of nodes between and including the root node and the current node, and a method that creates parented nodes.

Data::Grove::Parent works by creating a Perl \`\`tied'' object that contains a parent reference (\``"Parent"`') and a reference to the original Data::Grove object (\``"Raw"`').  Tying-magic is used so that every time you reference the Data::Grove::Parent object it actually references the underlying raw object.

When you retrieve a list or a property of the Raw object, Data::Grove::Parent automatically adds magic to the returned list or node.  This means you only call \`**add\_magic()**' once to create the first Data::Grove::Parent object and then use the grove objects like you normally would.

The most obvious use of this is so you don't have to call a \``"delete"`' method when you want to release a grove or part of a grove; since Data::Grove and Data::Grove::Parent objects have no cyclic references, Perl can garbage collect them normally.

A secondary use is to allow you to reuse grove or property set fragments in multiple trees.  WARNING: Data::Grove currently does not protect you from creating your **own** cyclic references!  This could lead to infinite loops if you don't take care to avoid them.

## METHODS

- $object-\>**root()**

  - $object-\>**rootpath()**

  \``root()`' returns the root node if \``$object`' is a \``"Data::Grove::Parent"`' object.  \``rootpath()`' returns an array of all the nodes between and including the root node and \``$object`'.

- $tied = $object-\>add\_magic(\[ $parent \])

  \``add_magic()`' returns a `"Data::Grove::Parent"` object with \``$object`' as it's \``"Raw"`' object.  If \``$parent`' is given, that becomes the tied object's parent object.

## AUTHOR

Ken MacLeod, ken@bitsko.slc.ut.us

## SEE ALSO

[**perl**(1)](/perl/1.md), **Data::Grove**(3)
