in reply to variable number of hash of hashes

Using iteration for populating the hash is fairly simple, but recursion is tidy for dumping the structure:

#!/usr/bin/perl use strict; use warnings; my %hash; while (<DATA>) { my $parent = \%hash; chomp; for my $str (split ',') { $parent = $parent->{$str} ||= {}; $parent->{count}++ } } dumpHash (\%hash, ''); sub dumpHash { my ($hash, $indent) = @_; for my $child (sort keys %$hash) { next if $child eq 'count'; print "$indent$child $hash->{$child}{count}\n"; dumpHash ($hash->{$child}, "$indent "); } } __DATA__ string1,string2,string3,string4 string3,string4 string1,string2,string3 string1,string3,string5

Prints:

string1 3 string2 2 string3 2 string4 1 string3 1 string5 1 string3 1 string4 1

Note that you need to keep a count and a hash (ref) of any child nodes for each parent node. Incrementing a hashref will not lead to a happy life!

True laziness is hard work

Replies are listed 'Best First'.
Re^2: variable number of hash of hashes
by Boetsie (Sexton) on Jul 24, 2012 at 07:19 UTC

    Thank you all, great solutions!

    I've implemented 'GrandFather's' method, since this was working straight away and seemed the be the most easy method.

    Many thanks! Boetsie