Output:#!/usr/bin/perl -w use strict; use Data::Dumper; my @bigArray = qw(brown red+green blue+yellow black red+white purple+o +range+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__
Key change vs the code I posted in your previous node is use of ||= vs = so that a key is only assigned an anonymous hashref when it doesn't already have a value. (Which isn't quite right; it's only assigned a hashref when it doesn't have a true value, but that will work so long as any value a key can ever have is true. Here they can only be either hashrefs or the value 1, both of which are indeed true.)$VAR1 = { 'blue' => { 'yellow' => 1 }, 'purple' => { 'orange' => { 'gray' => 1 } }, 'brown' => 1, 'black' => 1, 'red' => { 'green' => 1, 'white' => 1 } };
Makeshifts last the longest.
In reply to Re: hash tree
by Aristotle
in thread hash tree
by hotshot
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |