What you'll need to do is, as described above, create
some type of data structure out of the file beforehand.
What you might want to do is start with a chunk of code like
my($category, $subcategory) = split(/&/, $ENV{'QUERY_STRING'});
if($subcategory ne "") {
# Read in the file and look for the subcategory
# specified, as you are already doing
}
else {
# Read in the file and count the values in the
# subcategory, as per turnstep's answer above.
}
This would get you the desired behavior of having a CGI
that can handle with and without a subcategory.