There is also CGI::Ex::Validate of which I am the author, but which I don't actively market. We have used CGI::Ex::Validate every week for the past 8 years. It has run javascript and perl validation on millions of pages.

Thanks for that suggestion, I'll have a closer look at it. At a first glance, it looks exactly like what I was looking for (and exactly like what I was plotting in my mind to write in case nothing good came up).