#!/usr/bin/perl use strict; use warnings; use Test::More; use Data::Visitor::Callback; foreach my $ignore ( 0, 1 ) { my $structure = { foo => "bar", gorch => [ "baz", 1 ], }; my $o = Data::Visitor::Callback->new( ignore_return_values => $ignore, plain_value => sub { no warnings 'uninitialized'; s/b/m/g; "laaa" }, array => sub { $_ = 42; undef }, ); $_ = "original"; $o->visit( $structure ); is( $_, "original", '$_ unchanged in outer scope'); is_deeply( $structure, { foo => "mar", gorch => 42, }, "values were modified" ); $o->callbacks->{hash} = sub { $_ = "value" }; $o->visit( $structure ); is( $structure, "value", "entire structure can also be changed"); } done_testing;