The following module was proposed for inclusion in the Module List:

  modid:       IO::Pipe::Producer
  DSLIP:       RdpOp
  description: Get STDOUT & STDERR handles on a subroutine.
  userid:      ROBLEACH (Robert Leach)
  chapterid:   21 (File_Handle_Input_Output)
  communities:

  similar:

  rationale:

    If you have a series of sequential steps to perform to process a
    stream of input and each of those steps is somewhat complex, you
    might want to encapsulate those steps in their own subroutines, but
    doing so on a large file would mean you have to wait for the last
    step to start before you start getting output from your script:

    @results1 = step1($fh); @results2 = step2(\@results1); @results3 =
    step3(\@results2); print(@results3);

    Instead, you can start getting results right away if each step was
    reading and printing to standard in & out and you called them as
    forked producers. You could chain them together like this:

    print(<$producer->getSubroutineProducer(\&step3,
    $producer->getSubroutineProducer(\&step2,
    $producer->getSubroutineProducer(\&step1,$fh)))>);

    This is basically piping, which is why I selected to put
    Producer.pm in IO::Pipe. Forking and piping between subroutines is
    the unique part of the approach. I've already used this to
    encapsulate some C functions I converted using SWIG. The C function
    was printing to standard output (and standard error) from a number
    of places throughout a complex library and I wanted to be able to
    run it and capture the output to return as a string and it worked
    beautifully.

  enteredby:   ROBLEACH (Robert Leach)
  enteredon:   Fri Nov 16 20:43:02 2012 GMT

The resulting entry would be:

IO::Pipe::
::Producer        RdpOp Get STDOUT & STDERR handles on a subroutine. ROBLEACH


Thanks for registering,
-- 
The PAUSE

PS: The following links are only valid for module list maintainers:

Registration form with editing capabilities:
  
https://pause.perl.org/pause/authenquery?ACTION=add_mod&USERID=1bb00000_3e162a41819fa24a&SUBMIT_pause99_add_mod_preview=1
Immediate (one click) registration:
  
https://pause.perl.org/pause/authenquery?ACTION=add_mod&USERID=1bb00000_3e162a41819fa24a&SUBMIT_pause99_add_mod_insertit=1
Peek at the current permissions:
  
https://pause.perl.org/pause/authenquery?pause99_peek_perms_by=me&pause99_peek_perms_query=IO%3A%3APipe%3A%3AProducer

Reply via email to