sub aveAoA { my( $ref, $n ) = @_; my @sums; my $code = qq[ for my \$i ( 0 .. \$#\$ref ) { ]; $code .= qq[ \$sums[ $_ ] += \$ref->[ \$i ][ $_ ];] for 0 .. $n -1; $code .= '}'; eval $code; $sums[ $_ ] /= @{ $ref } for 0 .. $n -1; return @sums; } our $M ||= 1e6; our $N ||= 4; my @data; $#data = $M -1; $data[ $_ ] = [ map int(-10+rand 20), 1.. $N ] for 0 .. $#data; my @sums = aveAoA( \@data, $N );