my %database; my $curCol; for() { if(/^(col\d+)\s+(.*)/) #(.+) isnt good but as I dont know exactlly how your data looks like... { push(@{$database{$1}}, $2); $curCol = $1; } elsif(/^\s+(.*)/) { push(@{$database{$curCol}}, $1); } }