in reply to hash tree
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.
|
|---|