#!/usr/bin/perl use strict; use warnings; ## setup my ($gap, $elements, $first, $i) = (10000, 20000, 10000, 0); my @data = map { rand } (1 .. $elements); ## compute initial sum my $sum = 0; $sum += $_ for @data[0 .. $gap]; ## go through @data serially computing averages while (1) { printf("average of %d to %d: %d", $i + $first, $i + $first + $gap, $sum / $gap); $sum -= $data[$i]; # subtract old 1st element last if ++$i + $gap > $elements; # stop when done $sum += $data[$i + $gap]; # add new last element }