http://www.perlmonks.org?node_id=786852


in reply to Introduction to Parallel::ForkManager

Thanks for the post.

I am new to Perl, and want to make sure I understand this right. When we say "$manager->start and next;" , doesn't what is below this statement (rest of the for loop that is) get skipped completely? I am having a hard time understanding at what point (and precisely how) the child process is spawned, where does it end, and how the code actually executes. Can someone please explain this a bit more? The way I see it, it seems like all these child processed are spawned but nothing happens after that since we are out of the for loop already!

Thanks in advance.

  • Comment on Re: Introduction to Parallel::ForkManager

Replies are listed 'Best First'.
Re^2: Introduction to Parallel::ForkManager
by fullermd (Priest) on Aug 07, 2009 at 21:40 UTC
    When we say "$manager->start and next;" , doesn't what is below this statement (rest of the for loop that is) get skipped completely?

    The and isn't just a "do this then this", it's a shortcut operator. If the $manager->start evaluates to something true, it does the next, but otherwise it doesn't.

    In the particular case of Parallel::ForkManager, the ->start method returns values just like fork does; in the parent, it returns the pid of the child (which is a positive integer, and thus true), and in the child, it returns 0 (which is false).

    So, the result is that in the parent process, the next happens, and it goes around and spawns off the next one (which is what you want the parent to do). In the child, since the ->start returns a false value, the and isn't followed, and it goes ahead and does the bits of actual work. The child does its thing (with system in this case), and then calls the ->finish method, which is equivalent to exit, so the child doesn't go back to the top of the loop and try spawning off more children (that's the parent's job).

      Very clear and precise. Thank you very much !