#! perl -slw use strict; use threads; use Thread::Queue; use File::Find; use File::Copy; use File::Path; my $THREADS = 4; my $Q = new Thread::Queue; sub worker { while( my $path = $Q->dequeue ) { print "Creating directory" . $workdirectory . "\n"; mkpath($workdirectory); copyfiles( $workdirectory, $FilenamewithpathQueue->dequeue, $filename[0] ); print "Processing Calculations...\n"; open(RUNSCRIPT,">runscript.bash"); print RUNSCRIPT <& $workbasedirectory/$filename[0].log EOD close(RUNSCRIPT); if (system("bash runscript.bash") != 0) { die "failed!\n";} else { print "done!\n"; } print "bash $workdirectory/runscript.bash\n"; print "\n"; } } my @threads = map{ threads->create( \&worker ) } 1 .. $THREADS; find( sub{ $Q->enqueue( $File::Find::name ) }, $basedirectory ); $Q->enqueue( (undef) x $THREADS ); $_->join for @threads;