de2425 has asked for the wisdom of the Perl Monks concerning the following question:

Hi Perl Monks,


I am having a problem that I hope someone might help solve. I would like to find a way to either read a file line by line from a remote FTP source (preferable via Net::FTP or the like) or to read the file into an array where I might process it line by line. I have tried using some of the examples in Net::FTP as shown below but haven't been able to quite understand how I would go about doing this. Can anyone help?


$ftp = Net::FTP->new("ftp.host.com", Debug => 0) || die "Cannot connec +t to some.host.name: $@"; $ftp->login("user",'pass') || die "Cannot login ", $ftp->message; $ftp->cwd("/disk2/Danny")||die "Cannot change working directory ", $ft +p->message; $ftp->get("cordis_grant_info.txt",$file)|| die "get failed ", $ftp->me +ssage;

Replies are listed 'Best First'.
Re: read FTP file line by line
by Fletch (Bishop) on Mar 03, 2010 at 18:58 UTC

    Your best bet (presuming a recent enough Perl) probably would be to open a filehandle for a scalar as the local file to the get method, then split that on newlines and process from there. The problem with that though is that you're going to have to keep the entire file in RAM locally which might be a problem (for large enough files).

    my $sink = ''; open( my $fh, '>', \$sink ) or die "Can't open handle into scalar: $!\ +n"; ## ... $ftp->get( "remote", $fh ); my @lines = split( /\n/, $sink ); for( @lines ) { ## ... }

    The cake is a lie.
    The cake is a lie.
    The cake is a lie.

Re: read FTP file line by line
by bot403 (Beadle) on Mar 03, 2010 at 19:41 UTC

    You can create a named pipe on disk using mkfifo then pass that to the get() method. Then in a seperate perl program open the fifo like a normal file and process it line by line.