#!/usr/bin/perl use warnings; use strict; use Data::Dumper; my %info = ( level_a => { 1 => { name => "a", loc => "b", }, }, level_b => { 2 => { name => "c", loc => "d", }, }, level_c => { 3 => { name => "e", loc => "f", } } ); delete $info{'level_b'} or warn $!; #the following delete creates $info{'level_b'}{2} ?? delete $info{'level_b'}{2}{'name'} or warn $!; #delete $info{'level_b'} or warn $!; #works fine print Dumper(%info);