#!/usr/bin/perl

@data = qw/-3 -3 -3 -3 -3 3 3 3 3 3
                   -6 -6 -6 -6
                   -2 -2 -2    0 0 0    1 1 1     2 2 2
                   -9 -9 -1 -1 6 6 7 7 8 8 10 10
                   -25 -13 -12    -8 -7  -4  4 5   9 11 12 26/;

print standard_deviation_data(\@data);

# $sd = standard_deviation_data(\@array) computes the standard
# deviation of an array of numbers.
#
sub standard_deviation_data {
    my $arrayref = shift;
    my $mean = mean($arrayref);
    return sqrt( mean( [map $_ ** 2, @$arrayref] ) - ($mean ** 2) );
}

# $mean = mean(\@array) computes the mean of an array of numbers.
#
sub mean {
    my ($arrayref) = @_;
    my $result;
    foreach (@$arrayref) { $result += $_ }
    return $result / @$arrayref;
}
