in reply to How to awk a grep result in-script

Found it:

foreach my $line (@array) { my @column = split( /\s+/, $line ); print $column[0], " ", $column[1], " ", $column[7],"\n"; my $columnID = $column[0]; foreach ( my $columnID ) { while ( $columnID =~ /(^FBgn\d+)/ ) { my $ID = $1; print $ID, "\n"; } } }

Which yields:

[kdfadm@serv01 ~]$ /usr/bin/perl SplitTest root 10053 sudo kdfadm 10057 -bash root 24073 sudo kdfadm 24077 -bash kdfadm 28868 scp kdfadm 28869 /usr/bin/ssh kdfadm 29005 /usr/bin/perl kdfadm 29006 sh kdfadm 29007 ps kdfadm 29008 grep root 111587 sudo kdfadm 111592 -bash kdfadm 121521 /bin/sh kdfadm 121527 /opt/kdf/home/java8/bin/java kdfadm 121562 /opt/kdf/home/jdk1.8.0_162/jre/bin/java kdfadm 121563 /opt/kdf/home/jdk1.8.0_162/jre/bin/java kdfadm 121572 /opt/kdf/home/jdk1.8.0_162/jre/bin/java kdfadm 121576 /opt/kdf/home/jdk1.8.0_162/jre/bin/java kdfadm 121597 /opt/kdf/home/jdk1.8.0_162/jre/bin/java kdfadm 121600 /opt/kdf/home/jdk1.8.0_162/jre/bin/java kdfadm 121615 /opt/kdf/home/jdk1.8.0_162/jre/bin/java kdfadm 121622 /opt/kdf/home/jdk1.8.0_162/jre/bin/java

Thanks to anyone who had a look.

Replies are listed 'Best First'.
Re^2: How to awk a grep result in-script
by AnomalousMonk (Archbishop) on Nov 15, 2019 at 00:21 UTC

    Found it: ...
    ... my $columnID = $column[0]; foreach ( my $columnID ) { while ( $columnID =~ /(^FBgn\d+)/ ) { my $ID = $1; print $ID, "\n"; } } ...
    I'm not sure if you mean that you've found a solution or a problem (or perhaps it refers to some out-of-band discussion, e.g., the Chatterbox), but the quoted loop code is puzzling:
    • my $columnID = $column[0]; defines and assigns a value to a lexical that is never accessed in the remainder of its scope;
    • foreach ( my $columnID ) { ... } defines a masking lexical that is assigned no value and so is undefined by default;
    • while ( $columnID =~ /(^FBgn\d+)/ ) { ... } matches the undefined masking lexical (odd that this produced no warning message... you do have warnings enabled, don't you?) against a pattern that cannot possibly match it (if there were a match, the loop would run forever).
    c:\@Work\Perl\monks>perl -le "use strict; use warnings; ;; my $columnID = 'XXX'; foreach ( my $columnID ) { while ( $columnID =~ /(^X)/ ) { my $ID = $1; print qq{$ID \n}; } } " Use of uninitialized value in pattern match (m//) at -e line 1.


    Give a man a fish:  <%-{-{-{-<