You could set it up so that each shuffle is done after a
fork, and just
wait for that one to end/die before going to the next. Something like (untested; off top of head & docs, but i think is the general outline):
my @deck = create_deck();
while(1){ # or whatever; loop over specific deals, or do just N deals
+, etc.
my $pid = fork;
die unless defined $pid;
if($pid){ # parent
wait;
# report on $? if desired
next;
}
do_heavy_lifting(\@deck);
exit; # w/an error code based on result if desired
}
sub do_heavy_lifting {
...
my %positions = ....;
...
}
So the
%positions isn't created/populated (made huge) until in the fork'd process, so when that
exits, the memory will get freed to the system, but your program is still going from the parent process.