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};