One thing I noticed is that a lot of spam bots post junk strings to the form, and you can catch some of them. By testing for "multi-voweled" strings - strings with 5 vowels in a row, or more, you can guess that the submission is junk.
Here's a short snippet of code which shows how to do this check (this assumes "$field" is an incoming field value you want to check:
if($field =~ /[bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ]/) { print "<script> alert(\"Nobody has a Name like that!\"); history.back();</script>"; exit; }