This is the expected autovivification behaviour in Perl that you should be aware of. That's why you should check the existance of a key and its ancestors' keys before deleting it.
exists $info{'level_b'} and
exists $info{'level_b'}{2} and
exists $info{'level_b'}{2}{'name'} and # this line is not necessa
+ry
delete $info{'level_b'}{2}{'name'} or warn $!;
I did a super-search and found the following node ...
Autovivification with hash of hashes ... that addresses this problem.
PS: That
print Dumper(%info); could be better written as
print Dumper(\%info); to give a cleaner presentation of the data structure.