This is in response to Michael R. Davis previous comment.
Nowadays there are far more alternatives than the old and unmaintained Net::SSH::Perl for doing SSH from Perl.
Net::SSH2 is a client module implemented on top of the C library libssh2. It is not completely mature yet but the author is very nice and solves reported bugs almost immediately. Also, the API is a bit too C-ish. For file transfer it supports SCP and SFTP, though SFTP support is very rough and not very efficient but Net::SFTP::Foreign can be used on top of it.
Net::OpenSSH is a wrapper around OpenSSH client, with a very powerful and perl-ish API. Only works on Linux/Unix systems (no Windows, no Cygwin, no VMS). It supports SCP and rsync for file transfers and integrates nicely with Net::SFTP::Foreign for SFTP. Net::OpenSSH::Parallel is an extension for using it to run commands in several hosts in parallel. POE::Component::OpenSSH integrates it inside the POE framework.
Net::SSH::Expect, based on Expect, is nice for controlling devices exposing a restricted shell (for instance, routers, bridges, etc.).
Net::SFTP::Foreign is an SFTP client that can use to connect to the remote server the ssh program, plink, Net::OpenSSH or with the Net::SFTP::Foreign::Backend::Net_SSH2 backend Net::SSH2. It's API supports most of the operations you will expect from a modern SFTP client, as recursive operations or globs and is far more robust and much, much faster than Net::SFTP.