Shiping Wang wrote:
> Hi,

Hello,

> I wrote a parsing script, it is working but give me some error message
> at beginning: Use of uninitialized value in concatenation (.) or string
> ... and also it gives some unwanted stuff. To get around this problem, I
> want to directly go to the line and start extract result, in this case I
> would like to start from line :
> 
> Testing trait:                  lnsbp_adj_age
> 
> From first line to "Testing trait: ..." line the $. can be vary depends
> on the application option I use, my question is how can I dynamically
> determine the first line number that match  "Testing trait: ..." then I
> can directly jump there start parsing? or other better ways to handle it?

You can use the range operator in scalar context.  Literal numbers are
compared to the value of $..

This appears to do what you require:

#!/usr/bin/perl
use warnings;
use strict;

open INF, '<', $qtdtout or die "Cannot open '$qtdtout' $!";

my ( $trt, $snp );

while ( <INF> ) {
    last if /Run completed/;
    if ( 1 .. /^Testing trait:\s+(.*)/ ) {
        $trt = $1;
        next;
        }
    $snp = $1 if /^Testing marker:\s+(.*)/;
    next unless /^\s+\d/;
    print "$trt\t$snp\t", /not tested/ ? 'notest' : ( split )[ 6 ], "\n";
    }

__END__





John
-- 
Perl isn't a toolbox, but a small machine shop where you can special-order
certain sorts of tools at low cost and in short order.       -- Larry Wall

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to