#! perl -slw use strict; use threads qw[ async yield ]; use Thread::Queue; my $Qrv = new Thread::Queue; my @work = qw[ C: D: P: Q: T: U: V: W: Z: ]; for ( 1 .. 2 ) { my $cmd = join ' ', 'dir /s', shift( @work ), '>nul'; async( sub{ $Qrv->enqueue( "$_: " . system( $cmd ) ); } )->detach; } while( @work ) { my( $threadNo, $rv ) = split ': ', $Qrv->dequeue(); my $cmd = join ' ', 'dir /s', shift( @work ), '>nul'; async( sub{ $Qrv->enqueue( "$threadNo: " . system( $cmd ) ); } )->detach; } sleep 2;