my %hash; for (@bigArray) { @tmp = split(\\+/); # split by '+' $node = 'value'; $node = {$_=>$node} foreach reverse @keys; .... } #### my @bigArray = qw(brown red+green blue+yellow black red+white purple+orange+gray); #### %hash = ( brown => 1, red => ( green => 1, white => 1, ), blue => ( yellow => 1, ), black => 1, purple => ( orange => ( gray => 1, ), ), );