use warnings; use strict; use Data::Dumper; my %hoh; while () { my @items = split ' '; push @{$hoh{'this'}->{'that'}->{'theOther'} }, [@items]; } print Dumper (\%hoh); __DATA__ eggs bacon cheese tomatoes potatoes onions beans peas cabbage