use MolFile; use threads; use Thread::Queue; my $database_compounds = ( MolFile->new( "File" => shift @ARGV )->parse_noHydrogens() ); my @names = ( keys %$database_compounds ); sub doWork { return; } ( our $THREADS, my $Qwork, my $Qresults ) = ( 1, new Thread::Queue, new Thread::Queue ); my @thread_pool = map { threads->create( \&doWork, $Qwork, $Qresults ) } 1..$THREADS; #---- map { my $i = $_; map { $Qwork->enqueue("$names[$_]!"."$names[$i]!") if $$database_compounds{$names[$i]}->Formula eq $$database_compounds{$names[$_]}->Formula) ; } ($i+1..$#names); } (0..$#names); #---- $Qwork->enqueue( (undef) x $THREADS ); map {$_->join();} @thread_pool; for (1..$THREADS) { while ( my $result = $Qresults->dequeue ) { print $result , "\n"; } } #### use MolFile; use threads; use Thread::Queue; my $database_compounds = ( MolFile->new( "File" => shift @ARGV )->parse_noHydrogens() ); my @names = ( keys %$database_compounds ); sub doWork { return; } ( our $THREADS, my $Qwork, my $Qresults ) = ( 1, new Thread::Queue, new Thread::Queue ); my @thread_pool = map { threads->create( \&doWork, $Qwork, $Qresults ) } 1..$THREADS; #---- foreach my $i (0..$#names) { foreach my $j ($i+1..$#names) { if ( $$database_compounds{$names[$i]}->Formula eq $$database_compounds{$names[$j]}->Formula ) { my $string = "$names[$i]"."!"."$names[$j]"; $Qwork->enqueue($string); } } } #---- $Qwork->enqueue( (undef) x $THREADS ); map {$_->join();} @thread_pool; for (1..$THREADS) { while ( my $result = $Qresults->dequeue ) { print $result , "\n"; } }