my @titles = ...; if (@titles == 1) { $BIGLIST{$title[0]} = [ @RESTOFFIELDS ]; } elsif (@titles == 2) { $BIGLIST{$title[0]}{$titles[1]} = [ @RESTOFFIELDS ]; } ...etc. #### my @titles = ...; my $ref = \%BIGLIST; while (@titles > 1) { my $title = shift @titles; $ref = \($ref->{$title}); } $ref->{$title[0]} = [ @RESTOFFIELDS ];