#!/usr/bin/perl use strict; use warnings; use Data::Dumper; my $h = { 'comp' => { 'cmd' => { 'tc1' => { platform_type => 'all', testsuite_type => 'all', view => 'private' }, 'tc2' => { platform_type => 'all', testsuite_type => 'all', view => 'private'} } } }; delete $h->{comp}{cmd}{tc1}; delete $h->{comp}{cmd}{tc2}; unless (keys %{$h->{comp}{cmd}}){ delete $h->{comp}{cmd}; } unless (keys %{$h->{comp}}){ delete $h->{comp}; } print Dumper($h); __DATA__ ---------- Capture Output ---------- > "c:\perl\bin\perl.exe" _new.pl $VAR1 = {}; > Terminated with exit code 0.