#! perl -slw use strict; use threads; use Thread::Queue; our $T //= 10; our $N //= 1000; my $Q = new Thread::Queue; async{ my $tid = threads->tid; open my $cmd, '-|', 'count.pl ' . int( rand $N ) or die $!; $Q->enqueue( "$tid:$_" ) while defined ( $_ = <$cmd> ); $Q->enqueue( "$tid:done\n" ); $Q->enqueue( undef ); }->detach for 1 .. $T; for( 1 .. $T ) { while( $_ = $Q->dequeue ) { printf "%s", $_; } } __END__ ##This is count.pl #! perl -slw use strict; $|++; my $i = $ARGV[0] // 30; print --$i while $i and sleep 1;