I hate to give all 5's, but I love Params::Validate. It's become as common in the perl I write as 'use strict'. It provides enough flexibility to ensure that it won't ever get in your way (it handles both positional and non-positional arguments,) it's syntax is simple and intuitive, and I've rarely had a case that couldn't be expressed with it.
This is a totally handy module, that puts a nice interface over the top of SFTP. Used in conjunction with the Net::SSH::Perl module, it's a great way to automate common file transfer tasks.
The one issue I have with it, and it's fairly major, is that it is quite slow compared to just using the sftp or scp clients provided with OpenSSH. This is likely not a problem if the files you are transferring are small; if they are large, though, it may be. YMMV.