Here is an example way to do what you want for educational purposes (Parallel::ForkManager is really the way to go in production code).
It is possible to loop through functions by taking references with the \& syntax:Fork failure is indicated by an undef return value by the fork function. If you want to go on with processing in a non-parallel manner when fork fails, you can just check if it's defined. Full example:sub sub1 { print 'sub1 ran' } sub sub2 { print 'sub2 ran' } my @refs = (\&sub1, \&sub2); $_->() foreach @refs;
use strict; use warnings; use POSIX ':sys_wait_h'; my @subs_to_run = ( \&sub1, \&sub2, \&sub3, \&sub4, \&sub5, ); foreach my $sub (@subs_to_run) { my $is_parent = fork; # try to fork next if $is_parent; # both child and fork failure will be false $sub->(); # we're in the child or fork failed, run the sub exit if defined $is_parent; # exit only if actually forked } 1 while waitpid(-1, WNOHANG) > 0; # wait for all children
In reply to Re^3: Learning to use fork()
by kroach
in thread Learning to use fork()
by ovedpo15
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |