Having placed
use strict; and
use warnings; at the top of your script you can
- Open your input file using a lexical filehandle and the three-argument form of open, being sure to test for success.
- Do a scalar read in a for loop iterating for however many lines of heading you wish to skip over. Doing it in a loop means the variable you read into only exists within the scope of the loop so it isn't left hanging around. For a single discard you could just do one read in a bare block to achieve the same.
- Use split, as already advised, in combination with an array slice to get your columns. Remember that array subscripts start at zero. If you need to use the last column remember to chomp the line terminator at the top of the while loop.
Code not tested.
use strict;
use warnings;
my $headerCt = 1;
my $dataFile = q{xxx.dat};
open my $dataFH, q{<}, $dataFile
or die qq{open: < $dataFile: $!\n};
my $discard = <$dataFH> for 1 .. $headerCt;
while ( <$dataFH> )
{
my ( $col1, $col4, $col8 ) =
( split m{\t} )[ 0, 3, 7];
# Do something here with your extracted columns.
}
close $dataFH
or die {close: < $dataFile: $!\n};
I hope this helps you towards a solution.
Cheers,
JohnGG