in reply to Hash of Hashes of Hashes

The problem is that hash references (what {} returns) are local to the process that created them.

So when you save those references in your dbm, they're only going to be valid for the current process, and won't work when your program runs again.

The other problem is that every time you create a new key, you're overwriting your whole hash.

# your else clause, rewritten %{$hitsdb->{$page}->{$key}}={ 'year' => $Year, 'month' => $Month, 'day' => $month_day, 'referer' => $referer, 'counter' => 1 }; print "new instance";
Otherwise, you wipe out all the old data every time you add a new key. You've got the same problem in your other else branch, which you don't really need, since adding a new instance will auto-vivify the page if it's not already there.