my $lastind = -1; for my $i (0 .. @$var - 1) { if ($var->[$i]->{id} eq $var->[$lastind]->{id}) { $var->[$lastind]->{value} += $var->[$i]->{value}; splice @$var, $i, 1; } else { $lastind = $i; } }