Net-xFTP Net::xFTP is a wrapper class to combine common functions of Net::FTP, Net::SSH2, and Net::SFTP, and now Net::FTPSSL, Net::FSP, Net::SFTP::Foreign, and Net::OpenSSH all into a single set of functions allowing one to switch seemlessly between the two without having to make non-trivial code changes. Only functionality common to all protocols has been implemented here with the intent and invitation to add more functions and features and maybe other *FTP-ish modules in the future. The module has also been re-implemented into a modular fashion allowing for the easy addition of other protocols in the future. The methods have been tested and seem to work properly for normal cases. Two Perl/Tk GUI applications currently exist as wrappers around Net::xFTP: ptkftp (file-transfer gui) and jfm3 (graphical file-manager). PURPOSE I created this module when I had developed several web application programs which FTP'd data to and from a central server via Net::FTP. The client changed to a new remote server that required Net::SFTP. Faced with rewriting these programs without changing functionality (since for some reason Net::FTP and Net::SFTP use slightly different methods and conventions). I decided instead to simply create a common module that would use the same method calls to do the same things and allow me to specify the protocol in a single place. I also am the author of I, a Perl/Tk graphical user-interface to Net::FTP and Net::SFTP. I now intend to rewrite it to use Net::xFTP and greatly reduce and simplify the code for that application. Hopelfully others will find this module useful. Patches adding needed functionality are welcome. SYNOPSIS use Net::xFTP; #Test for needed protocol module. die "..This server connection needs Net::SFTP!" unless (Net::xFTP->haveSFTP()); #Establish a new connection to a remote host. $ftp = Net::xFTP->new('SFTP', "some.host.name", Debug => 0, user => 'userid', password => 'opensesme') or die "Cannot connect to some.host.name: $@"; #Establish a "local" (simulated connection) to self. $ftp = Net::xFTP->new(); #Change the current working directory on the remote host. $ftp->cwd('/pub') or die "Cannot change working directory ", $ftp->message(); #Get the current working directory on the remote host. my $current_remote_path = $ftp->pwd(); #Get a list of files and subdirectories in "/pub". my @filesAndSubfolders = $ftp->ls('/pub'); #Get a detailed (ls -l) list of files and subdirectories. my @ls_l_details = $ftp->dir('/pub'); #Create a new subdirectory. $ftp->mkdir('myownfolder') or die "Cannot make subdirectory ", $ftp->message(); #Remove an empty subdirectory. $ftp->rmdir('myownfolder') or die "Cannot remove subdirectory ", $ftp->message(); #Get the contents of a file on the remote server. $ftp->get('remote.file', 'local.file') or die "get failed ", $ftp->message(); #Get the contents of a remote file and write to an open filehandle. open FHANDLE, ">local.file" or die "Could not open local file ($!)"; print FHANDLE "A Header Line!\n"; flush FHANDLE; $ftp->get('remote.file', *FHANDLE) or die "get failed ", $ftp->message(); print FHANDLE "A Footer Line!\n"; close FHANDLE; #Put a local file onto the remote server. $ftp->put('local.file', 'remote.file') or die "put failed ", $ftp->message(); #Read from a file handle putting the content in a remote file. open FHANDLE "put(*FHANDLE, 'remote.file') or die "put failed ", $ftp->message(); close FHANDLE; #Delete a remote file. $ftp->delete('some.file') or die "Cannot delete file ", $ftp->message(); #Rename a remote file. $ftp->rename('oldfilename', 'newfilename') or die "Cannot delete file ", $ftp->message(); #Change permissions of a remote file. $ftp->chmod(755, 'some.file.or.dir') or die "Cannot change permissions ", $ftp->message(); #Fetch the size of a remote file. print "remote.file has ".$ftp->size('remote.file')." bytes.\n"; #Copy a remote file to a new remote location. $ftp->copy('remote.fileA','remote.fileB') or die "Cannot copy the file ", $ftp->message(); #Move a remote file to a new remote location. $ftp->move('old/path/old.filename', 'new/path/new.filename') or die "Cannot move the file ", $ftp->message(); #Disconnect an existing connection. $ftp->quit(); INSTALLATION To install this module, run the following commands: perl Makefile.PL make make test make install COPYRIGHT AND LICENCE Copyright (C) 2005 - 2010 Jim Turner This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.