use Data::Dumper; my %on_prop; my %on_user; while () { my @fields = split "\t"; my %column_data = map {$_, shift(@fields)} qw(PROP COLOUR TXTCOL URL360 USER YOUR_NAME ETC); $on_prop{$column_data{PROP}} = \%column_data; push @{$on_user{$column_data{USER}}}, \%column_data; } print Dumper(\%on_prop); print Dumper(\%on_user); print scalar @{$on_user{'rob'}}; # prints 2 (more than one item for this user) __DATA__ 123 Red blue whatever rob blah blah blah 124 Red blue whatever rob blah blah blah 125 Red blue whatever jon blah blah blah