my @keys = qw (1,2,3); #### my @keys = (1,2,3); # or (1..3) if they're consecutive numbers #### my @keys = qw(1 2 3); #### use Data::Dumper; my @keys = (1,2,3); my $href = 'somedata'; $href = {pop(@keys) => $href} while @keys; #$href = {$_ => $href} foreach reverse @keys; # alternate solution, if @keys is constant or needed later print Dumper( $href ); __END__ $VAR1 = { '1' => { '2' => { '3' => 'somedata' } } };