#!/usr/bin/perl use strict; use Data::Dumper; #use Data::Dump 'pp'; my %data = (); my ($key1,$key2); while (){ chomp; next unless /\S/; #skip blank lines my @col = split ',',$_; #column1 is $col[0] if (@col == 2){ ($key1,$key2) = @col; } else { push @{ $data{$key2}{$key1}},\@col; } } #print pp \%data; # use Data::Dump if installed print Dumper \%data; __DATA__ 1,1 1,A1,B1,C1,D1 2,A1,B1,C1,D1 3,A1,B1,C1,D1 1,2 1,A2,B2,C2,D2 2,A2,B2,C2,D2 3,A2,B2,C2,D2 1,3 1,A3,B3,C3,D3 2,A3,B3,C3,D3 3,A3,B3,C3,D3