#!/usr/bin/perl use strict; use warnings; my %hash; while () { 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 #### string1 3 string2 2 string3 2 string4 1 string3 1 string5 1 string3 1 string4 1