Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Contact Us
Online Help
Domain Status
Man Pages

Virtual Servers

Topology Map

Server Agreement
Year 2038

USA Flag



Man Pages

Manual Reference Pages  -  DATA::VISITOR::CALLBACK (3)

.ds Aq ’


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



version 0.30


        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 );


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


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 ot 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.


Use these keys for the corresponding callbacks.

The callback is in the form:

        sub {
                my ( $visitor, $data ) = @_;

                # or you can use $_, its 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 reccomended 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 colled 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.


o Yuval Kogman <>
o Marcel Gruenauer <>


This software is copyright (c) 2013 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.

Search for    or go to Top of page |  Section 3 |  Main Index

perl v5.20.3 DATA::VISITOR::CALLBACK (3) 2013-06-24

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with manServer 1.07.