in reply to deleting a hash key can create one?

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.