#!/usr/bin/perl use warnings; if ($#ARGV < 0){@ARGV = qw(a b c d)} &afork (\@ARGV,4,\&mysub); print "Main says: All done now\n"; sub mysub{ my $x = $_[0]; system "mkdir dir$x"; chdir "dir$x"or die $!; for ($i=1;$i<10;$i++) { system "touch $i-$x"; # open3(OUTPUT, INPUT, ERRORS, cd dir$x;make clean; make all); # } } ################################################## sub afork (\@$&) { my ($data, $max, $code) = @_; my $c = 0; foreach my $data (@$data) { wait unless ++ $c <= $max; die "Fork failed: $!\n" unless defined (my $pid = fork); exit $code -> ($data) unless $pid; } 1 until -1 == wait; } #####################################################