in reply to Re: Who needs files? Net::FTP::Scalar (code)
in thread Who needs files? Net::FTP::Scalar (code)
Although LWP::* can do FTP as I found out. And
that is probably the recommended way to go. I had already
basically finished this by the time I figured that out
So I'm going to post it here, for comments, or whatever.
So I'm going to post it here, for comments, or whatever.
Default mode is to download in Binary, you can specify Ascii like this:
my($file) = get("ftp://user:password@ftp.somewhere.com/pub/somefile.txt;type=a");
Here is Simple.pm:
package Net::FTP::Simple; require Exporter; use strict; use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION); @ISA = qw(Exporter); @EXPORT = qw(); @EXPORT_OK = qw(get); $VERSION = '0.01'; use URI; use Net::FTP::Scalar; $Net::FTP::Scalar::SCALAR_MODE = 1; sub get { my($url) = shift(); my($uri) = URI->new($url); my($user) = $uri->user(); my($pass) = $uri->password(); my($host) = $uri->host(); my($port) = $uri->port(); my($ftp) = Net::FTP::Scalar->new($host, Debug => 0) || warn("new() + '$host' failed: $@") && return(); $ftp->login($user, $pass) || warn("login() '$user' failed: $@") && + return(); my(@path) = grep { length() } $uri->path_segments(); my($file) = pop(@path); my($type); if (ref($file)) { my(@params); ($file, @params) = @$file; foreach (@params) { $type = $_ if (s/^type=//); } } if (defined($type) && $type eq 'a') { $ftp->ascii(); } else { $ftp->binary(); } foreach (@path) { $ftp->cwd($_) || warn("cwd() '$_' failed: $@") && return(); } unless ($ftp->get($file)) { $ftp->quit(); warn("get() '$file' failed: $@"); return(); } return($Net::FTP::Scalar::OUT_FILE); } return(1);
Staunch
|
---|
In Section
Cool Uses for Perl