use strict; my $total = 0; my $count = 0; my %occur = (); my @list; if(defined(@ARGV) && $ARGV[0] eq "-f") { # fast mode, averages only shift(@ARGV); while(<>) { next unless(/^\s*[\d\.]+\s*$/); $total+=$_; $count++; } if($count) { printf " Avg: %.3f\n", $total/$count; } exit; } while(<>) { next unless(/^\s*[\d\.]+\s*$/); chomp($_); $occur{$_}++; push(@list, $_); $total+=$_; } unless(defined(@list)) { exit; } $count = $#list +1; my $mode = (sort {$occur{$b} <=> $occur{$a}} (keys %occur))[0]; my $mode_count = $occur{$mode}; my ($min,$median,$max) = (sort {$a <=> $b} @list)[0,int($count/2),-1]; printf "Entries: %d\n", $count; printf " Max: %.3f\n", $max; printf " Min: %.3f\n", $min; printf " Total: %.3f\n", $total; printf " Avg: %.3f\n", $total/$count; printf " Median: %.3f\n", $median; printf " Mode: %.3f (%d occurances)\n", $mode, $mode_count;