in reply to communication between programs
When you've looked at all the complicated select-based work-arounds, try it the simple way :)
#! perl -sw use strict; use threads; use Thread::Queue; $|++; our $THREADS //= 4; my $Q = new Thread::Queue; async { open my $pipe, '-|', q[ perl -E"$|++; sleep(1), say $$, ':', $_ for 1 .. 3" ] or die $!; $Q->enqueue( $_ ) while defined( $_ = <$pipe> ); $Q->enqueue( undef ); }->detach for 1 .. $THREADS; for ( 1 .. $THREADS ) { print while defined( $_ = $Q->dequeue ); } __END__ c:\test>925473.pl 4648:1 4764:1 704:1 1924:1 4648:2 4764:2 704:2 1924:2 4648:3 4764:3 704:3 1924:3
|
|---|