Everyone, thanks for your help. The problem lied in the fact that I had empty sub-arrays. I was trying to anticipate the number of unique viruses coming in. Sometimes I guess right, others not. All I needed to do was start with an array X and then push a new array on to X for each name in the database.
my @dbData;
while (@names = $day->fetchrow_array())
{
$name = $names[0];
push my @virus, [@dbData];
}