---
name: "Attean::TreeRewriter"
section: "3pm"
platform: "linux"
package: "libattean-perl"
version: "0.035-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Attean::TreeRewriter"
---

# Attean::TreeRewriter(3pm)

Walk and rewrite subtrees

## NAME

Attean::TreeRewriter - Walk and rewrite subtrees

## VERSION

This document describes Attean::TreeRewriter version 0.035

## SYNOPSIS

```
  use v5.14;
  use Attean;
  my $w = Attean::TreeRewriter->new();
  my ($rewritten, $tree) = $w->rewrite($tree, $thunk);
  if ($rewritten) {
        ...
  }
```

## DESCRIPTION

The Attean::TreeRewriter class walks the nodes of query trees and rewrites sub-trees based on handlers that have been registered prior to rewriting.

## ROLES

None.

## METHODS

- register\_pre\_handler( \\&code )

  Register a handler that will be called for each sub-tree during tree rewriting.

  The function will be called as `"&code( $tree, $parent_node, $thunk )"` where `$thunk` is an opaque value passed to `"rewrite"`.

  The function must return a list `"($handled, $descend, $rewritten)"`. `$handled` is a boolean indicating whether the handler function rewrote the sub-tree, which is returned as `$rewritten`. The `$descend` boolean value indicates whether the the tree rewriting should continue downwards in the tree.

- "rewrite( $tree, $thunk, \\%seen, $parent )"

  Rewrites the given `$tree` using the registered handler functions. `$thunk` is passed through to each handler function. `%seen` is currently unused. `$parent` is passed through to the handler functions as the value of the pseudo-parent tree node for `$tree`.

  Returns a list `"($handled, $tree)"` with `$handled` indicating whether rewriting was performed, with the corresponding rewritten `$tree`.

## BUGS

Please report any bugs or feature requests to through the GitHub web interface at \<https://github.com/kasei/attean/issues\>.

## SEE ALSO

## AUTHOR

Gregory Todd Williams  `"<gwilliams@cpan.org>"`

## COPYRIGHT

Copyright (c) 2014--2022 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
