#!/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__