I'm not a perl expert, so please forgive me (you and the Monks) if this is a silly suggestion, but in your position I'd consider doing it all in memory. You said 26,000 genes, so how many nucleotides per gene - could it be around 1,000, or is that way too low? If 1000, this gives only 26M nucleotides.
in reply to Up for Critique
If we use a character per nucleotide, this is only 26M bytes. If these figures are low, we could use 2 bits per nucleotide (as there are 4 different ones), giving an increase of a factor of 4 over just using bytes (you'd have to write pack and unpack functions).
So I'd download the data from the database(s), do my processing in memory, store any results back, and display the results on some kind of report.
Please contact me if you want to get into details (non-perl related!).