prepare anchor match during option parsing
authorMischa POSLAWSKY <perl@shiar.org>
Sat, 7 Sep 2019 14:30:03 +0000 (16:30 +0200)
committerMischa POSLAWSKY <perl@shiar.org>
Sat, 7 Sep 2019 18:16:38 +0000 (20:16 +0200)
barcat

diff --git a/barcat b/barcat
index 05502ea068c5a67dd24976e5eb34d3654c4f5d5f..e6b22b6872becc110a6fe3934077c51e61851b8a 100755 (executable)
--- a/barcat
+++ b/barcat
@@ -17,7 +17,9 @@ my %opt;
 GetOptions(\%opt,
        'color|c!',
        'C' => sub { $opt{color} = 0 },
-       'field|f=s',
+       'field|f=s' => sub {
+               $opt{anchor} = /^[0-9]+$/ ? qr/(?:\S*\h+){$_}\K/ : $_ for $_[1];
+       },
        'human-readable|H!',
        'interval|t:i',
        'trim|length|l=s' => sub {
@@ -52,6 +54,7 @@ $opt{width} ||= $ENV{COLUMNS} || 80;
 $opt{color} //= -t *STDOUT;  # enable on tty
 $opt{trim}   *= $opt{width} / 100 if $opt{trimpct};
 $opt{units}   = $opt{'human-readable'} && ['', qw( k M G T P E Z Y y z a f p n μ m )];
+$opt{anchor} //= qr/\A/;
 
 if (defined $opt{interval}) {
        $opt{interval} ||= 1;
@@ -65,10 +68,7 @@ if (defined $opt{interval}) {
 $SIG{INT} = 'IGNORE';  # continue after assumed eof
 
 my (@lines, @values);
-my $anchor = !defined $opt{field} ? qr/\A/ :
-       $opt{field} =~ /^[0-9]+$/ ? qr/(?:\S*\h+){$opt{field}}\K/ :
-       $opt{field};
-my $valmatch = qr/$anchor ( \h* -? [0-9]* \.? [0-9]+ |)/x;
+my $valmatch = qr/$opt{anchor} ( \h* -? [0-9]* \.? [0-9]+ |)/x;
 while (readline) {
        s/\r?\n\z//;
        s/^\h*// unless $opt{unmodified};