sub sub1 { print 'sub1 ran' }
sub sub2 { print 'sub2 ran' }
my @refs = (\&sub1, \&sub2);
$_->() foreach @refs;
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:
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
|