Data::Visitor::Callback(3p)

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.