my %categories = (); while ( my $name = <$dataIn1>) { chomp($name); my ($file, $category) = split(/\t/, $name); if (exists($categories{$category})) { $categories{$category} += 1; } else { $categories{$category} = 1; } } foreach my $category (sort { $categories{$b} <=> $categories{$a} } keys %categories) { printf "%s: %s\n", $category, $categories{$category}; } #### something like: my $score = $subres->[2] Foreach $category in $categories {where %subres [0] = $category} ($score = ($subres [1] / ($categories{$category}))