$opt{'signal-stat'} //= exists $SIG{INFO} ? 'INFO' : 'QUIT';
$opt{markers} //= '=avg >31.73v <68.27v +50v |0';
$opt{palette} //= $opt{color} && [31, 90, 32];
+$opt{input} = @ARGV && $ARGV[0] =~ m/\A[-0-9]/ ? \@ARGV : undef;
my (@lines, @values, @order);
}
my $valmatch = qr/$opt{anchor} ( \h* -? [0-9]* \.? [0-9]+ (?: e[+-]?[0-9]+ )? |)/x;
-while (readline) {
+while (defined ($_ = $opt{input} ? shift @{ $opt{input} } : readline)) {
s/\r?\n\z//;
s/^\h*// unless $opt{unmodified};
push @values, s/$valmatch/\n/ && $1;
if ($opt{hidemin} or $opt{hidemax}) {
$opt{hidemin} ||= 1;
$opt{hidemax} ||= @lines;
- printf '%s of ', sum(@values[$opt{hidemin} - 1 .. $opt{hidemax} - 1]) // 0;
+ printf '%s of ', sum(grep {length} @values[$opt{hidemin} - 1 .. $opt{hidemax} - 1]) // 0;
}
if (@order) {
my $total = sum @order;
printf '%s total', color(1) . $total . color(0);
- printf ' in %d values', scalar @values;
+ printf ' in %d values', scalar @order;
+ printf ' over %d lines', scalar @lines if @order != @lines;
printf(' (%s min, %s avg, %s max)',
color(31) . $order[-1] . color(0),
color(36) . (sprintf '%*.*f', 0, 2, $total / @order) . color(0),
=head1 SYNOPSIS
-B<barcat> [<options>] [<input>]
+B<barcat> [<options>] [<file>... | <numbers>]
=head1 DESCRIPTION
-Visualizes relative sizes of values read from input (file(s) or STDIN).
+Visualizes relative sizes of values read from input
+(parameters, file(s) or STDIN).
Contents are concatenated similar to I<cat>,
but numbers are reformatted and a bar graph is appended to each line.