Currently the only problem I have with it is that it doesn't croak if you forget the Parent or Child blocks, but I think that's pretty minor.
Easy enough:
--- ForkBlock.pm~ Wed Dec 24 20:18:01 2008 +++ ForkBlock.pm Wed Dec 24 21:02:50 2008 @@ -31,6 +31,9 @@ my $parent=$params{"parent"}; my $child =$params{"child"} ; my $error =$params{"error"} ; + + croak "No Child defined" unless $child; + croak "No Parent defined" unless $parent; local $!;
Although one could make the case that it ought to fall-through without a Parent. You can achieve that with DumbFork { Parent {return} ...}

This patch exposes the child PID in a non-collisiony way, as a parameter to the parent; you could also copy $ForkBlock::CHILD_PID immediately after fork.

--- ForkBlock.pm~ Wed Dec 24 21:02:50 2008 +++ ForkBlock.pm Wed Dec 24 21:14:35 2008 @@ -40,7 +40,7 @@ FORK_IT: { if($CHILD_PID=fork()) { #i'm the parent - &$parent; + &$parent($CHILD_PID); } elsif(defined($CHILD_PID)) { #i'm the child
Also note that the prototype permits this alternate invocation:
Fork { Parent \&manager, Child \&worker };
And with this patch:
--- ForkBlock.pm~ Wed Dec 24 21:14:35 2008 +++ ForkBlock.pm Thu Dec 25 02:08:18 2008 @@ -27,10 +27,10 @@ #private--implements the actual forking sub phork { my %params=%{shift()}; - - my $parent=$params{"parent"}; - my $child =$params{"child"} ; - my $error =$params{"error"} ; + + my $parent=$params{parent}|| $params{Parent}; + my $child =$params{child} || $params{Child}; + my $error =$params{error} || $params{Error}; croak "No Child defined" unless $child; croak "No Parent defined" unless $parent;
You can also do:
Fork { Parent=>sub{ ... }, #The comma's important here. Child =>sub{ ... } };
The distinction between DumbFork and Fork seems backwards/unnecessary. What if the exit has a condition of if $CHILD_PID == 0 added? Another interesting change might be an optional/default Reaper that's invoked before the phork...

--
In Bob We Trust, All Others Bring Data.


In reply to Re: ForkBlock by belg4mit
in thread ForkBlock by BrentDax

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.