{ 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; ... } }