http://www.perlmonks.org?node_id=349591


in reply to Re: Streaming to Handles
in thread Streaming to Handles

I've already created it and got it working passing back an array, which you then can loop through as normal. Problem is in my case the array is going to be returning a MASSIVE amount of data, we are talking of a processing time of about 6 hours. Unless I'm on a supercomputer with a crap load of RAM I'd have to chop that array into pieces and pass it back piecemeal or stream it. Plus streaming is faster I believe. There has to be a way because streaming is possible, I'm just not familiar with the syntax. I've seen modules where people write to a stream and then read the FILEHANDLE on the stream. Help! Please?

Dean
The Funkster of Mirth
Programming these days takes more than a lone avenger with a compiler. - sam
RFC1149: A Standard for the Transmission of IP Datagrams on Avian Carriers

Replies are listed 'Best First'.
Re: Re: Re: Streaming to Handles
by dave_the_m (Monsignor) on May 01, 2004 at 13:33 UTC
    The only way I can think of doing this without heavily restructuring your code is to create a pipe, fork off a child, then have the child write the list of filenames to the pipe and have the parent read them back in.
      ...Which isn't as hard as it sounds. Something like:
      my $f = List->new; my $pid = open(FROM_LIST,"-"); if (!defined($pid)) { die "fork error: $!\n"; } elsif (!$pid) { # Child $f->stream_to(\*STDOUT); $f->look_in('c:/'); $f->list; exit(0); } # Parent while (<FROM_LIST>) { print "$_\n"; }
      should do the trick.