App-summ
view release on metacpan or search on metacpan
script/summ view on Meta::CPAN
#!perl
our $DATE = '2018-07-07'; # DATE
our $VERSION = '0.001'; # VERSION
use strict;
use warnings;
use Getopt::Long qw(:config bundling no_ignore_case);
my %Opts = (
calc_count => 1,
calc_mode => 1,
calc_min => 1,
calc_max => 1,
calc_mean => 1,
calc_median => 1,
calc_variance => 1,
calc_stddev => 1,
calc_percentiles => [25, 75],
calc_covariance => 0,
calc_correlation => 0,
);
sub parse_cmdline {
my $res = GetOptions(
'count!' => \$Opts{calc_count},
'mode!' => \$Opts{calc_mode},
'max!' => \$Opts{calc_max},
'min!' => \$Opts{calc_min},
'mean!' => \$Opts{calc_mean},
'median!' => \$Opts{calc_median},
'variance!' => \$Opts{calc_variance},
'stddev!' => \$Opts{calc_stddev},
'no-percentile|P' => sub { $Opts{calc_percentiles} = [] },
'percentile|p=s' => sub {
my $p = int($_[1]);
die "summ: Invalid percentile $p, must be between 0 and 100\n"
if $p < 0 || $p > 100;
push @{ $Opts{calc_percentiles} }, $p
unless grep { $p == $_ } @{ $Opts{calc_percentiles} };
},
'covariance!' => \$Opts{calc_covariance},
'correlation!' => \$Opts{calc_correlation},
'help|h' => sub {
print <<USAGE;
Usage:
summ [OPTIONS]... [INPUT]...
summ --help
For more details, see the manpage/documentation.
USAGE
exit 0;
},
'version|v' => sub {
no warnings 'once';
print "summ version ".($main::VERSION // 'dev'), "\n";
exit 0;
},
);
exit 99 if !$res;
}
sub run {
my (@nums, @nums2);
while (<>) {
chomp;
if ($Opts{calc_covariance} || $Opts{calc_correlation}) {
my ($n, $n2) = split /\s+/, $_, 2;
defined $n2 or die "summ:$.: Please supply two numbers: $_\n";
push @nums, $n+0;
push @nums2, $n2+0;
} else {
push @nums, $_+0;
}
}
die "summ: Please specify at least 1 number\n" unless @nums;
require Statistics::Discrete;
my $sd = Statistics::Discrete->new;
$sd->add_data(@nums);
if ($Opts{calc_count}) {
printf "Count: %s\n", $sd->count;
}
if ($Opts{calc_mode}) {
require Statistics::Basic;
require Statistics::Basic::Mode;
printf "Mode: %s\n", Statistics::Basic::mode(@nums);
}
if ($Opts{calc_min}) {
printf "Minimum: %s\n", $sd->minimum;
}
if ($Opts{calc_max}) {
printf "Maximum: %s\n", $sd->maximum;
}
if ($Opts{calc_mean}) {
printf "Mean: %s\n", $sd->mean;
}
if ($Opts{calc_median}) {
printf "Median: %s\n", $sd->median;
}
if ($Opts{calc_variance}) {
printf "Variance: %s\n", $sd->variance;
}
if ($Opts{calc_stddev}) {
printf "Std. dev.: %s\n", $sd->standard_deviation;
}
( run in 1.008 second using v1.01-cache-2.11-cpan-f56aa216473 )