X-Git-Url: http://git.shiar.nl/barcat.git/blobdiff_plain/5d57bd7d9e6b2f62ded5c5b801f6ad971d079809..dc97b2596fd2429ae31c4c4987127ff48d350a1e:/barcat diff --git a/barcat b/barcat index cb3282e..1fd0dd3 100755 --- a/barcat +++ b/barcat @@ -400,11 +400,9 @@ sub show_stat { $vars{partsum} = sum(0, grep {length} @values[$linemin .. $linemax]) if $linemin <= $linemax and ($opt{hidemin} or $opt{hidemax}); %vars = (%vars, - sum => sum(@order), min => $order[-1], max => $order[0], ); - $vars{avg} = $vars{sum} / @order; } say varfmt($opt{report}, \%vars); return 1; @@ -413,10 +411,16 @@ sub show_stat { sub calc { my ($func) = @_; if ($func eq 'avg') { - return sum(@order) / @order; + return calc('sum') / @order; } elsif ($func eq 'sum') { - return sum(@order); + 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(