---
name: "Data::Visitor::Callback"
section: "3pm"
platform: "linux"
package: "libdata-visitor-perl"
version: "0.32-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Data::Visitor::Callback"
---

# Data::Visitor::Callback(3pm)

A Data::Visitor with callbacks.

## NAME

Data::Visitor::Callback - A Data::Visitor with callbacks.

## VERSION

version 0.32

## SYNOPSIS

```
        use Data::Visitor::Callback;
        my $v = Data::Visitor::Callback->new(
                # you can provide callbacks
                # $_ will contain the visited value
                value => sub { ... },
                array => sub { ... },
                # you can also delegate to method names
                # this specific example will force traversal on objects, by using the
                # 'visit_ref' callback which normally traverse unblessed references
                object => "visit_ref",
                # you can also use class names as callbacks
                # the callback will be invoked on all objects which inherit that class
                'Some::Class' => sub {
                        my ( $v, $obj ) = @_; # $v is the visitor
                        ...
                },
        );
        $v->visit( $some_perl_value );
```

## DESCRIPTION

This is a Data::Visitor subclass that lets you invoke callbacks instead of needing to subclass yourself.

## METHODS

- new %opts, %callbacks

  Construct a new visitor.

  The options supported are:

  - ignore\_return\_values

    When this is true (off by default) the return values from the callbacks are ignored, thus disabling the fmapping behavior as documented in Data::Visitor.

    This is useful when you want to modify `$_` directly

  - tied\_as\_objects

    Whether or not to visit the "tied" in perlfunc of a tied structure instead of pretending the structure is just a normal one.

    See "visit\_tied" in Data::Visitor.

## CALLBACKS

Use these keys for the corresponding callbacks.

The callback is in the form:

```
        sub {
                my ( $visitor, $data ) = @_;
                # or you can use $_, it's aliased
                return $data; # or modified data
        }
```

Within the callback `$_` is aliased to the data, and this is also passed in the parameter list.

Any method can also be used as a callback:

```
        object => "visit_ref", # visit objects anyway
```

- visit

  Called for all values

- value

  Called for non objects, non container (hash, array, glob or scalar ref) values.

- ref\_value

  Called after `"value"`, for references to regexes, globs and code.

- plain\_value

  Called after `"value"` for non references.

- object

  Called for blessed objects.

  Since "visit\_object" in Data::Visitor will not recurse downwards unless you delegate to `"visit_ref"`, you can specify `"visit_ref"` as the callback for `"object"` in order to enter objects.

  It is recommended that you specify the classes (or base classes) you want though, instead of just visiting any object forcefully.

- Some::Class

  You can use any class name as a callback. This is called only after the `"object"` callback.

  If the object `"isa"` the class then the callback will fire.

  These callbacks are called from least derived to most derived by comparing the classes' `"isa"` at construction time.

- object\_no\_class

  Called for every object that did not have a class callback.

- object\_final

  The last callback called for objects, useful if you want to post process the output of any class callbacks.

- array

  Called for array references.

- hash

  Called for hash references.

- glob

  Called for glob references.

- scalar

  Called for scalar references.

- tied

  Called on the return value of `"tied"` for all tied containers. Also passes in the variable as the second argument.

- seen

  Called for a reference value encountered a second time.

  Passes in the result mapping as the second argument.

## SUPPORT

Bugs may be submitted through the RT bug tracker \<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Visitor\> (or bug-Data-Visitor@rt.cpan.org \<mailto:bug-Data-Visitor@rt.cpan.org\>).

## AUTHORS

- •

  Yuval Kogman \<nothingmuch@woobling.org\>

- •

  Marcel Grünauer \<marcel@cpan.org\>

## COPYRIGHT AND LICENCE

This software is copyright (c) 2023 by Yuval Kogman.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
