use strict; use warnings; use List::Util qw(sum); my $VAR1 = { '153-1' => { '19-4' => { 'cost' => '6300.00', 'cost2' => '630.00' }, '135-1' => { '68-4' => { 'cost' => '300.00', 'cost2' => '130.00' } }, '1069-9' => {}, '35-1' => { '28-4' => { 'cost' => '30.00', 'cost2' => '10.00' } }, }, }; my $cost_key = '68-4'; foreach my $temp1 (values %$VAR1) { foreach my $temp2 (values %$temp1) { next if !exists $temp2->{$cost_key}; print sum( values(%{$temp2->{$cost_key}})); } }