#! perl -slw use strict; use threads; $|=1; my @threads; for my $i ( 1 .. 10 ) { ## if the condition is true if( $i & 1 ) { ## every odd number matches ## Start a thread to run the sub ## Passing the number as an argument ## And saving the thread object, push @threads, async \&other, $i; } } ## Wait for all the threads to finish $_->join for @threads; ## Done. exit; sub other{ my( $number ) = @_; print "Other( $number ) starting"; ## pretend we're doing something that takes a while... for( 1 .. rand 10 ) { print "Other( $number ) busy ..."; sleep 1; } print "Other( $number ) finished"; } __END__ C:\test>542468 Other( 1 ) starting Other( 1 ) busy ... Other( 3 ) starting Other( 3 ) busy ... Other( 5 ) starting Other( 5 ) busy ... Other( 7 ) starting Other( 7 ) busy ... Other( 9 ) starting Other( 9 ) finished Other( 1 ) busy ... Other( 3 ) finished Other( 5 ) busy ... Other( 7 ) busy ... Other( 1 ) busy ... Other( 5 ) finished Other( 7 ) busy ... Other( 1 ) busy ... Other( 7 ) busy ... Other( 1 ) busy ... Other( 7 ) busy ... Other( 1 ) busy ... Other( 7 ) busy ... Other( 1 ) busy ... Other( 7 ) busy ... Other( 1 ) finished Other( 7 ) busy ... Other( 7 ) finished