3. | stats.pl
#!/usr/bin/perl
use 5.018;
use strict;
use warnings;
use autodie;
my $total = 0;
my $count = 0;
my $max = undef;
my $min = undef;
my $sd_m = 0;
my $sd_s = 0;
while(<>) {
if(my($value) = $_ =~ m{^\s*(\d+(?:[.]\d+)?|[.]\d+)}) {
$value = 0 + $value;
$total += $value;
$count++;
if(not defined($min) or $value < $min) {
$min = $value;
}
if(not defined($max) or $value > $max) {
$max = $value;
}
my $old_m = $sd_m;
$sd_m += ($value - $old_m) / $count;
$sd_s += ($value - $old_m) * ($value - $sd_m);
}
}
say "Total: $total";
say "Count: $count";
exit if $count == 0;
say "Average: " . ($total / $count);
my $std_dev = sqrt($sd_s / ($count - 2));
say "Std Dev: $std_dev";
say "Min: $min";
say "Max: $max";