#!/usr/bin/perl -w use strict; use Data::Dumper; my @cols = qw(nat pls kac); my @bigStructure = (); my $realHeaders; my $lineCntr = 0; sub procHeader { my $hdrline = shift; my @instArray = (); my %hash = map {$_=>1} @cols; #thanks kcott my @contents = split /\s+/,$hdrline; for(@contents) { if($hash{$_}) { push @instArray,$_; } else { push @instArray, qw|skip|; } } return \@instArray; } while() { if(!m/^\d/){$realHeaders = procHeader($_)}; my @row = split /\s+/; for (0..$#{$realHeaders}) { if($realHeaders->[$_] ne 'skip') { push @{$bigStructure[$lineCntr]}, $row[$_]; } } $lineCntr++; } print Dumper \@bigStructure; 1; __DATA__ nat pls fof tri 0.1 0.1 0.23 0.1 2.3 1.8 3.2 4.4 5.5 3.2 8.6. 7.9 #### $VAR1 = [ [ 'nat', 'pls' ], [ '0.1', '0.1' ], [ '2.3', '1.8' ], [ '5.5', '3.2' ] ];