#! perl use strict; use warnings; use Data::Dump; use Parallel::Loops; my @names = qw(Fred Wilma Pebbles Barney Betty Bamm-Bamm Leela); my %lookup = map { $_ => 1 } @names; my @data = ( 'Fred loves Wilma and Pebbles.', 'Barney is the husband of Betty and the father of Bamm-Bamm.', 'Pebbles and Bamm-Bamm are playmates.', 'Homer is married to Marge; their children are Bart, Lisa, and Maggie.', ); #---------------------------------------------------------------------------------------- my %results1; for my $datum (@data) { for my $search_term (keys %lookup) { push @{$results1{$search_term}}, $datum if grep { /$search_term/ } $datum; } } dd \%results1; print "----------\n"; #---------------------------------------------------------------------------------------- my $pl = Parallel::Loops->new(4); my %results2; $pl->share(\%results2); $pl->foreach ( \@data, sub { my $datum = $_; for my $search_term (keys %lookup) { push @{$results2{$datum}}, $search_term if grep { /$search_term/ } $datum; } } ); # Invert the hash my %results2a; while (my ($key, $value) = each %results2) { for (@$value) { push @{ $results2a{$_} }, $key; } } dd \%results2a;