#!/usr/bin/perl -w use strict; use Data::Dumper; my @bigArray = qw(brown red+green blue+yellow black red+white purple+orange+gray); my %hash; for (@bigArray) { my @keys = split /\+/; my $ptr = \%hash; $ptr = $ptr->{$_} ||= {} for @keys[0..$#keys-1]; # work done here $ptr->{$keys[-1]} = 1; } print Dumper(\%hash); __END__ #### $VAR1 = { 'blue' => { 'yellow' => 1 }, 'purple' => { 'orange' => { 'gray' => 1 } }, 'brown' => 1, 'black' => 1, 'red' => { 'green' => 1, 'white' => 1 } };