foreach my $i ($#$arr) { $avg = ($i + ($avg ? $avg : $i)) / 2; } #### $avg = (...(($arr->[0]/2 + $arr->[1])/2 + $arr->[2])/2 + ... $arr->[$#$arr])/2; #### my @x = (10, 7, 5, 10, 50, 70, 75, 72, 79, 80); sub avg { my @arr = @_; my $avg; foreach my $i (@arr) { print "$i: $avg\n"; $avg = ($i + ($avg ? $avg : $i))/2; } return $avg; } print avg(@x),"\n"; 10: # undef 7: 10 5: 8.5 10: 6.75 50: 8.375 70: 29.1875 75: 49.59375 72: 62.296875 79: 67.1484375 80: 73.07421875 76.537109375 print avg(reverse @x),"\n"; 80: # undef 79: 80 72: 79.5 75: 75.75 70: 75.375 50: 72.6875 10: 61.34375 5: 35.671875 7: 20.3359375 10: 13.66796875 11.833984375 #### my @x = (10, 7, 5, 10, 50, 70, 75, 72, 79, 80); sub avg2 { my @arr = @_; my $sum; foreach my $i (@arr) { print "$i: $sum\n"; $sum += $i; } return $sum/@arr; } print avg(@x),"\n"; 10: # undef 7: 10 5: 17 10: 22 50: 32 70: 82 75: 152 72: 227 79: 299 80: 378 45.8 print avg(reverse @x),"\n"; 80: # undef 79: 80 72: 159 75: 231 70: 306 50: 376 10: 426 5: 436 7: 441 10: 448 45.8