Calculating the average and standard deviation in perl

The following two subroutines can be used as a drop in replacement for Math::NumberCruncher. This is useful when trying to limit the number of dependencies of your perl script.

 
sub average{
my($data) = @_;
if (not @$data) {
die("Empty arrayn");
}
my $total = 0;
foreach (@$data) {
$total += $_;
}
my $average = $total / @$data;
return $average;
}
sub stdev{
my($data) = @_;
if(@$data == 1){
return 0;
}
my $average = &average($data);
my $sqtotal = 0;
foreach(@$data) {
$sqtotal += ($average-$_) ** 2;
}
my $std = ($sqtotal / (@$data-1)) ** 0.5;
return $std;
}

Usage:

$ave = &average(@array);
#$ave = Math::NumberCruncher::Average(@array); //OLD WAY
$std = &stdev(@array);
#$std = Math::NumberCruncher::StandardDeviation(@array); //OLD WAY