#! perl -sw use strict; use threads; use threads::shared; use Thread::Queue; # grep -h %search_string% *.txt > retuned_Results.sl our $THREADS //= 4; my $semSTDOUT :shared; my $Q = new Thread::Queue; my @threads = map async { my $tid = threads->tid; while( my $file = $Q->dequeue ) { open my $fh, '<', $file or warn ( "$file:$!" ) and next; while( <$fh> ) { next unless m[$ARGV[0]]; lock $semSTDOUT; print; } close $fh; } }, 1 .. $THREADS; $Q->enqueue( glob $ARGV[ 1 ] ); $Q->enqueue( (undef) x $THREADS ); $_->join for @threads; __END__ c:\test>junk23 -THREADS=4 "Queue" *.pl >junk.dat c:\test>head junk.dat use Thread::Queue; my $input_queue = Thread::Queue->new(); my $result_queue = Thread::Queue->new(); use Thread::Queue; my $Q = Thread::Queue->new; use Thread::Queue; my $Q = new Thread::Queue; use Thread::Queue; my $Q = new Thread::Queue; use Thread::Queue;