Devel-DebugHooks
view release on metacpan or search on metacpan
lib/Devel/DebugHooks.pm view on Meta::CPAN
Before: SCALAR(0x134d398) <<SCALAR(0x134d398) 7
After: SCALAR(0x1239bc8) <<SCALAR(0x134d398) 7
We see that in *first* example the new variable is created: The new address of $DB::single is SCALAR(0x110cbc8)
but when assigning to $DB::single the value by old reference (SCALAR(0x10f8310) changed too.
In *second* example we see that addressing works in same manner, but value 7 is preserved as expected.
Why the value of $DB::single is not preserved?
# my $y = \$DB::single;
# # Can not use weaken. See error at 'reports/readline' file
# use Scalar::Util 'weaken';
# weaken $y;
# Because of $DB::single magic we can not access to old value by reference
# The localization is broken if we save a reference to $DB::single
# {
# my $x = $DB::single;
# print "Before: ". \$DB::single ." <<$DB::single $x >$y $$y\n"; # $$x == 0
# local $DB::single = $DB::single +1;
# print "After: ". \$DB::single ." <<$DB::single $x >$y $$y\n"; # $$x == 1, not 0
# }
# print "OUT: ". \$DB::single ." <<$DB::single - $x - $$x >$y\n";
( run in 0.785 second using v1.01-cache-2.11-cpan-65fba6d93b7 )