sub DeleteValueTreeWithinHash { my $HashData = $_[0]; my $FindValue = $_[1]; my $value = &RecursiveFunctionToDeleteValueWithinHash($HashData, $FindValue); print Dumper ($value); %{$HashData} = undef; %{$HashData} = %{$value}; print Dumper ($HashData); } #### $VAR1 = { '' => undef }; #### $VAR1 = { '0.29 type (ABC) {' => { '19.29 }' => {}, '18.28 ' => {}, '6.27 location(Y) {' => { '6.11 ' => {}, '7.12 direction : out; ' => {}, '17.26 ' => {}, '18.27 }' => {}, '8.13 surface : 0.0; ' => {}, '10.25 internal_power() {' => { '16.24 ' => {}, '11.17 related_outlet : "A"; ' => {}, '12.23 rise_power(wind_template_7x7) {' => { '14.21 index_2 ("4,5,6,7"); ' => {}, '13.20 index_1 ("1,2,3,4"); ' => {}, '15.22 hello : "kitty"; ' => {}, '12.19 ' => {}, '16.23 }' => {} }, '10.16 ' => {}, '17.25 }' => {} }, '9.14 function : "A"; ' => {} }, '2.8 location(A) {' => { '2.5 ' => {}, '4.7 surface : 0.004189; ' => {}, '3.6 direction : in; ' => {}, '5.8 }' => {} }, '5.9 ' => {}, '1.3 area : 7.761600; ' => {}, '0.2 ' => {} }, '19.30 ' => {} }; #### sub RecursiveFunctionToDeleteValueWithinHash { my $HashData = $_[0]; my $FindValue = $_[1]; my $keys; foreach $keys (sort { $a <=> $b } keys %{$HashData}) { if ($keys =~ m/^(([\d]+)\.([\d]+) )/) { my $MarkerNumber = $1; my $line_data = $keys; $line_data =~ s/^([\d]+)\.([\d]+) //; if ($line_data =~ m/$FindValue/) { delete $$HashData{$keys}; next ; } my @values = (sort { $a <=> $b } keys %{$$HashData{$keys}}); if (scalar(@values) != 0) { $$HashData{$keys} = &RecursiveFunctionToDeleteValueWithinHash($$HashData{$keys}, $FindValue); } } } return $HashData; } #### $VAR1 = { '0.29 type (ABC) {' => { '19.29 }' => {}, '18.28 ' => {}, '6.27 location(Y) {' => { '6.11 ' => {}, '7.12 direction : out; ' => {}, '17.26 ' => {}, '18.27 }' => {}, '8.13 surface : 0.0; ' => {}, '10.25 internal_power() {' => { '16.24 ' => {}, '11.17 related_outlet : "A"; ' => {}, '12.23 rise_power(wind_template_7x7) {' => { '15.22 hello : "kitty"; ' => {}, '12.19 ' => {}, '16.23 }' => {} }, '10.16 ' => {}, '17.25 }' => {} }, '9.14 function : "A"; ' => {} }, '2.8 location(A) {' => { '2.5 ' => {}, '4.7 surface : 0.004189; ' => {}, '3.6 direction : in; ' => {}, '5.8 }' => {} }, '5.9 ' => {}, '1.3 area : 7.761600; ' => {}, '0.2 ' => {} }, '19.30 ' => {} };