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.
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.