foreach my $user (@users) { $pm->wait_one_child() while !@keycards; <----- my $key = pop(@keycards); $pm->start and next; print "$user took the '$key' key\n"; $pm->finish(0, { key => $key }); } $pm->wait_all_children;