Hi daverave, you can do all you want and more using BioDB::GFF and the related Bio::DB::GFF::Feature. These will let you load a GFF file into a database (which can be in memory if you want) and extract features of whatever type you like and also sub-group them by attributes.

There is example code for doing much of this on their respective CPAN pages, so have a go, see how far you get and come back to us if you are still struggling - remember to include code/input/error messages/output that you write/use/get/want.