use strict; use warnings; my %v; $v{hourly_worker_expenses} = { # elaborate on this ! 'all' => 16 }; $v{hourly_worker_cost} = &{sub { my $cost = 0; my $item; my %costs = $v{hourly_worker_expenses}; #print %costs; foreach $item ($costs) { $cost += $costs{$item}; } #print $cost; return $cost; } }(); print $v{hourly_worker_cost}; #### Global symbol "$costs" requires explicit package name at test.pl line 13. Execution of test.pl aborted due to compilation errors. #### my %costs = \$v{hourly_worker_expenses}; my $costs = $v{hourly_worker_expenses}; my $costs = \$v{hourly_worker_expenses}; I originally didn't even mess around with the $costs/%costs hash and I tried to do the += with $cost and $v{hourly_worker_expenses}