use strict; use warnings; use Data::Dumper; my $hash = { 'abc' => { def => 1, ghi => 2, jkl => 3, }, 'mno' => { pqr => 4, stu => 3, vwx => 5, }, 2 => { def => 5, stu => 2, }, 0 => { def => 3, stu => 1, }, }; print Dumper $hash; for my $key (keys %$hash) { delete $$hash{$key} if $key =~ /^\d+$/ } print Dumper $hash;