##
sub outer {
my @helper;
local $helper[0] = sub {
...
};
$helper[0]->(@_);
}
##
##
{
my %in_node;
sub something_recursive {
my $node = shift;
if ($in_node{$node->{name}}) {
confess("Can't access $node->{name} while accessing $node->{name}");
}
local $in_node{$node->{name}} = 1;
...
}
}