use strict; my %names; while (<>) { my ($label, $name1, $name2, $name3, $name4) = split /:/; $names{$label}{$name1} = $name2; $names{$label}{$name3} = $name4; } #### # Untested, because I rarely use symbolic refs :) while (<>) { my ($label, $name1, $name2, $name3, $name4) = split /:/; $$label{$name1} = $name2; $$label{name3} = $name4; }