use warnings; use strict; use Data::Dumper; sub foo { my %hash = (); while () { chomp; my ( $name, $cnt, $item ) = split / /; $name =~ s/://g; $hash{$name}{$item} += $cnt; } return \%hash; } my $rhash = foo(); for my $k1 ( sort keys %$rhash ) { for my $k2 ( sort keys %{ $rhash->{$k1} } ) { open( FILE, ">>$k1.info" ); print FILE " $k1: $rhash->{$k1}{$k2} $k2 \n"; } } __DATA__ Gilligan: 1 coconut Skipper: 3 coconuts Gilligan: 1 banana Ginger: 2 papayas Professor: 3 coconuts MaryAnn: 2 papayas