perlquestion
Anonymous Monk
<p>This is sort of a follow-up on a previous post asking for help with forks. I've been trying to learn, but I'm still very confused. I *think* I understand the basic idea, but the implementation still escapes me.</p>
<p>[RichardK] suggested I might be better off describing what I want to achieve so someone might make a suggestion as to the approach or module to use. So here it is in, pseudo-kind-of-code:</p>
<code>
my @array1 = (1..5); # N=5
my @array2 = qw/a b/;
for my $val1 (@array1) {
# Start N processes here that can run in parallel.
# Each process outputs data to its own separate file.
# I will need it in the future.
for my $val2 (@array2) {
# For each of the N processes, wait until it is done,
# then start 2 parallel processes which use
# the output data as input.
# Save the output of each process separately to 2N files
# (two files with N elements would be better, but as I
# couldn't figure that out, I just postprocess the data ;-)
}
}
# "waitallchildren" or equivalent
# (Postprocess step to reduce the final output to 2 files
# - that I can do)
</code>
<p>And here is my second attempt, using another module, but which still doesn't work. The outer part does, but as soon as I uncomment the inner part, my prompt doesn't return anymore. No idea what's going on.</p>
<code>
use Proc::Fork;
for my $val1 (@array1) {
run_fork {
child {
open FILE, ">$val1.txt";
print FILE "Output of step 1\n";
close FILE;
}
parent {
my $child_pid_outer = shift;
waitpid $child_pid_outer, 0;
# for my $val2 (@array2) {
# run_fork {
# child {
# open FILE1, "$val1.txt";
# open FILE2, ">$val2$val1.txt";
# while (my $line = <FILE1>) {
# $line =~ s/1/2/;
# print FILE2 $line . "\n";
# }
# close FILE1;
# close FILE2;
# }
# parent {
# my $child_pid_inner = shift;
# waitpid $child_pid_inner, 0;
# } # Parent inner loop
# }; # Inner fork
# } # For loop
} # Parent outer fork
}; # Outer fork
}
</code>
<p>I'm currently trying to read the documentation to other modules, but it's not easy-going... I really don't understand much, so I'd very happy if someone could put me on the right track.</p>
17