Sharing data is feasible using a parallel module of your choice. Here is a demonstration using Parallel::ForkManager and MCE::Shared.
use strict;
use warnings;
use Parallel::ForkManager;
use MCE::Shared;
use Data::Dumper;
my @tokens = qw( ab bc cd de ef fg gh );
sub build_regex {
my ($token) = @_;
chop $token;
}
my $pm = Parallel::ForkManager->new(4);
$pm->set_waitpid_blocking_sleep(0);
tie my %result, 'MCE::Shared';
DATA_LOOP:
foreach my $token ( @tokens ) {
# forks and returns the pid for the child
my $pid = $pm->start and next DATA_LOOP;
my $regex = build_regex($token);
my @line_results = grep { $_ ne $token and /$regex/ } @tokens;
$result{ $token } = \@line_results if @line_results;
$pm->finish(0);
}
$pm->wait_all_children;
print Dumper( tied(%result)->export({ unbless => 1 }) ), "\n";
__END__
$VAR1 = {
'ef' => [
'fg'
],
'fg' => [
'gh'
],
'cd' => [
'de'
],
'de' => [
'ef'
],
'bc' => [
'cd'
],
'ab' => [
'bc'
]
};
Regards, Mario