#! perl -slw use strict; use threads; use Thread::Queue; my $Q = new Thread::Queue; my $cmd = 'perl -le"$|++;print $$ . q[:] . localtime() and sleep 1 for 1..rand(10)" |'; async{ my $pid1 = open my $fh, $cmd or die $!; $Q->enqueue( $_ ) while <$fh>; close $fh; $Q->enqueue( undef ); }->detach; async{ my $pid2 = open my $fh, $cmd or die $!; $Q->enqueue( $_ ) while <$fh>; close $fh; $Q->enqueue( undef ); }->detach; for( 1.. 2 ) { while( defined( local $_= $Q->dequeue ) ) { chomp; print; } } __END__ c:\test>junk6 3140:Wed Oct 1 16:04:35 2008 216:Wed Oct 1 16:04:35 2008 3140:Wed Oct 1 16:04:36 2008 216:Wed Oct 1 16:04:36 2008 3140:Wed Oct 1 16:04:37 2008 216:Wed Oct 1 16:04:37 2008 3140:Wed Oct 1 16:04:38 2008 216:Wed Oct 1 16:04:38 2008 216:Wed Oct 1 16:04:39 2008 216:Wed Oct 1 16:04:40 2008 216:Wed Oct 1 16:04:41 2008 c:\test>junk6 3308:Wed Oct 1 16:04:46 2008 3804:Wed Oct 1 16:04:46 2008 3308:Wed Oct 1 16:04:47 2008 3308:Wed Oct 1 16:04:48 2008 3308:Wed Oct 1 16:04:49 2008 3308:Wed Oct 1 16:04:50 2008 3308:Wed Oct 1 16:04:51 2008 3308:Wed Oct 1 16:04:52 2008