#!/usr/local/bin/perl -W

for (0..99){
    push @data, rand(100);
}
@ndata = normalize(@data);
for $i (0..99){
    print "$i) $data[$i] -> $ndata[$i]\n";
}
print "Before: Mean ",mean(@data), "\tStdDev ", stddev(@data), "\n"; 
print "After:  Mean ",mean(@ndata), "\tStdDev ", stddev(@ndata), "\n";

sub normalize{
    my @d = @_;
    my $m = mean(@d);
    my $std_dev = stddev(@d);
    my @nd=();
    my $j =0;
    for my $i (@d){
	$nd[$j] = ( $i - $m )/ $std_dev; 
	$j++;
    }
    return @nd;
}

sub mean {
    my @d = @_;
    my $count=0;
    my $sum=0;
    for my $i (@d){
	$count++;
	$sum += $i;
    }
    return $sum / $count;
}

sub stddev{
    my @d = @_;
    my $var=0;
    my $count=0;
    my $m = mean(@d);
    for my $i (@d){
	$count++;
	$var += ($i-$m)**2;
    }
    $var /= ($count-1);     # in sample std dev degrees of freedom = $count-1
    return sqrt($var);
}


__END__
  
A simple tool to normalize numeric data to N(0,1)
