my $thr = threads->create( sub { my $threadId = $i; open my $REFERENCE_FILE, '<', "$refFileName" or die "Can't open $refFileName: $!"; while ( defined( my $item = $inQ->dequeue() ) ) { my $lot = $item->{ 'lot' }; my $batch = $item->{ 'batch' }; my $part = $item->{ 'part' }; my $fastaComment = $item->{ 'fasta' }; my $readSequence = $item->{ 'read' }; my @hits = split /[,]/, $fastaComment; my $beadID = shift( @hits ); # do some sutff to the current item that makes use of # REFERENCE_FILE my $bestSeedOverallMismatches = $INF; my @bestSeedExtensions = (); foreach my $hitString ( @hits ) { ... } my %result = ( 'lot' => $lot, 'batch' => $batch, 'part' => $part, 'thread' => $threadId, 'extensions' => \@bestSeedExtensions, 'num_mm' => $bestSeedOverallMismatches, 'beadid' => $beadID, 'read' => $readSequence, ); $outQ->enqueue( \%result ); } close $REFERENCE_FILE; } );#end sub