use Data::Dumper; my %people; while () { chomp; my ($name, $group, $manager) = split/,/; # Don't do that, use Text::CSV instead if ($group) { ${ $people{$name}{Group} } = $group; # Autovivification means: if the reference exists, change the value, else, create a new reference } else { $people{$name}{Group} = \${ $people{$manager}{Group} }; # Autovivification again } } print Dumper \%people; print ${ $people{"Woody Boyd"}{Group} }; __DATA__ Sam Malone,Cheers,Rebecca Howe Woody Boyd,,Rebecca Howe Rebecca Howe,Cheers,Rebecca's Manager