I'm looking for a general-purpose module to take the drudgery out of validating subroutine and method arguments. I've scanned through various possibilities on CPAN: [`Params::Validate`](http://search.cpan.org/perldoc/Params::Validate), [`Params::Smart`](http://search.cpan.org/perldoc/Params::Smart), [`Getargs::Mixed`](http://search.cpan.org/perldoc/Getargs::Mixed), [`Getargs::Long`](http://search.cpan.org/perldoc/Getargs::Long), and a few others.

Any information regarding pros and cons of these or other modules would be appreciated. Thanks.