Data::Visitor::Callback - A Data::Visitor with callbacks.
version 0.31
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 the Data::Visitor manpage 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
the Data::Visitor manpage.
This is useful when you want to modify $_ directly
- tied_as_objects
-
Whether or not to visit the perlfunc/tied of a tied structure instead of
pretending the structure is just a normal one.
See visit_tied in the Data::Visitor manpage.
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 the Data::Visitor manpage 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.
Bugs may be submitted through the RT bug tracker
(or bug-Data-Visitor@rt.cpan.org).
This software is copyright (c) 2020 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.
|