@input = ( "M/C: blah blah blah", "C/M: wah wah wah", "C/M: wah wah ,wah", "C/M: wah wah, wah what then", "F/S: wah stfu you stupid moron", "S/F: ahahahaha ? hahaha", "S/F: ahahahaha ? hahaha", "C/M: count son" ); foreach (@input) { ($name,$text) = split(":",$_); $masterhash{$name}++; @words = split(/\W+/, $text); foreach (@words){ if($_ ne / /){ $anotherhash{ $name }{ $_ }++; } } } foreach $name (sort(keys %masterhash)){ print $name . ' = ' . $masterhash{$name} . " \n"; foreach $word (sort (keys %{ $anotherhash{ $name }} )){ print "\t$word = $anotherhash{$name}{$word} \n"; } }