From 80c5b5d47ac01071473c318dc85a579d441b011e Mon Sep 17 00:00:00 2001 From: Mischa POSLAWSKY Date: Mon, 28 Nov 2022 23:54:33 +0100 Subject: [PATCH] line stats regardless of values, nested report templates Additional colon operator just to make optional parts more legible. --- barcat | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/barcat b/barcat index 0558da6..fabc9a5 100755 --- a/barcat +++ b/barcat @@ -151,7 +151,7 @@ $opt{report} //= join('', '${sum+; color(1); $_ .= " total in "}', '${count#} values', '${lines#; $_ = $_ != @order && " over $_ lines"}', - sprintf(' (%s)', join ', ', + sprintf('${count: (%s)}', join ', ', '${min; color(31)} min', '${avg; $opt{reformat} or $_ = sprintf "%0.2f", $_; color(36)} avg', '${max; color(32)} max', @@ -396,21 +396,23 @@ sub show_stat { max => $order[0], ); $vars{avg} = $vars{sum} / @order; - print varfmt($opt{report}, \%vars); } - say ''; + say varfmt($opt{report}, \%vars); return 1; } sub varfmt { my ($fmt, $vars) = @_; $fmt =~ s[\$\{ \h*+ ((?: [^{}]++ | \{(?1)\} )+) \}]{ - my ($name, $cmd) = split /\s*;/, $1, 2; + my ($name, $op, $cmd) = split /\s*([;:])/, $1, 2; my $format = $name =~ s/\+// || $name !~ s/\#// && $opt{reformat}; local $_ = $vars->{$name}; defined && do { $_ = $opt{'value-format'}->($_) if $format; - if ($cmd) { + if ($cmd and $op eq ':') { + $_ = varfmt($cmd, $vars); + } + elsif ($cmd) { eval $cmd; warn "Error in \$$name report: $@" if $@; } -- 2.30.0