my $VAR1 = [ ... ]; # Dumper output you posted (s/VAR1 = = [/VAR1 = [/) print qq{Average elevation\n}; for my $track (@$VAR1) { print q{ }, $track->{name}, q{ = }; my $track_ele_total = 0; my $track_ele_count = 0; for my $segment (@{$track->{segments}}) { for my $point (@{$segment->{points}}) { ++$track_ele_count; $track_ele_total += $point->{ele}; } } printf qq{%06f\n} => $track_ele_total / $track_ele_count; }