CGI::Application::Dispatch is another data point. It uses a Rails-like dispatch table definition, which feels pretty comfortable to me. There's also a
CGI::Application::Dispatch::Regexp, but I haven't used that one.
As far as I know, there are no dispatchers based on query parameters. There may be a good reason for that.
My first impression is that I'd rather keep parameter validation close to the handler code for a particular url. And I can't see a clear way to handle POST requests either, which to me implies you'd be doing the same thing in two places.