A less computationally intensive variant would be to directly maintain a $sum, to which you add/subtract individual values (instead of push/shift on an array, from which you then recompute the sum every time):
#!/usr/bin/perl -lw
use strict;
use constant WINDOW => 10;
#my @data = map int( rand 10 ), 1 .. 30;
my @data = qw(3 8 8 2 5 5 0 3 8 3 2 3 2 3 5 4 8 7 5 4 6 3 1 6 3 6 0 7
+3 3);
my @mAves;
my $sum = 0;
for my $i (0..$#data) {
$sum += $data[$i];
$sum -= $data[$i-WINDOW()] if $i >= WINDOW;
push @mAves, $sum / WINDOW if $i >= WINDOW-1;
}
print join ' ', @data;
print join ' ', @mAves;
__END__
3 8 8 2 5 5 0 3 8 3 2 3 2 3 5 4 8 7 5 4 6 3 1 6 3 6 0 7 3 3
4.5 4.4 3.9 3.3 3.4 3.4 3.3 4.1 4.5 4.2 4.3 4.7
+ 4.7 4.6 4.9 4.7 4.9 4.1 4.1 3.9 3.8