$DATA{1}{a}{e} = 'snu'; $DATA{2}{a}{f} = 'woo'; $DATA{3}{b} = 'foo'; $DATA{4}{a}{e} = 'bar'; $DATA{5}{d} = 'bop'; #### put_element($DATA{3}, 'h', 'i', 'worked'); #### $DATA{3}{h}{i} = 'worked'; #### sub put_element { my $current = shift || die("Need root hash reference for put_element!"); # reference to the current level my $value = pop || die("Need value to be put for put_element!"); # value to be placed in structure $current = $$current{shift(@_)} while (@_ > 0); ${$current} = $value; return 1; }