yours makes %names = name => bob => jane joe => sue name2 => john => me oh => my #### yours makes %names = name => first => bob second => jane third => joe fourth => sue name2 => first => john second => me third => oh fourth => my #### use strict; my %names; while (<>) { my ($label, $name1, $name2, $name3, $name4) = split /:/; $names{$label}{"first"} = {$name1} $names{$label}{"second"} = $name2; $names{$label}{"third"} = {$name3} $names{$label}{"fourth"} = $name4; }