Automatic handling of any (re)use in calc().
$vars{partsum} = sum(0, grep {length} @values[$linemin .. $linemax])
if $linemin <= $linemax and ($opt{hidemin} or $opt{hidemax});
%vars = (%vars,
$vars{partsum} = sum(0, grep {length} @values[$linemin .. $linemax])
if $linemin <= $linemax and ($opt{hidemin} or $opt{hidemax});
%vars = (%vars,
min => $order[-1],
max => $order[0],
);
min => $order[-1],
max => $order[0],
);
- $vars{avg} = $vars{sum} / @order;
}
say varfmt($opt{report}, \%vars);
return 1;
}
say varfmt($opt{report}, \%vars);
return 1;
sub calc {
my ($func) = @_;
if ($func eq 'avg') {
sub calc {
my ($func) = @_;
if ($func eq 'avg') {
- return sum(@order) / @order;
+ return calc('sum') / @order;
}
elsif ($func eq 'sum') {
}
elsif ($func eq 'sum') {
+ state $cache; # avoid recount
+ state $cachednr = 0; # if unchanged
+ unless (@order == $cachednr) {
+ $cache = sum(@order);
+ $cachednr = @order;
+ }
+ return $cache;
}
elsif ($func =~ /\A([0-9.]+)v\z/) {
$1 <= 100 or die(
}
elsif ($func =~ /\A([0-9.]+)v\z/) {
$1 <= 100 or die(