use strict; if (defined(my $pid=fork()) { if ($pid) { # $pid is not 0, so this is the parent # Let's redirect the user (more extensive code in your example). redirect_user(); } else { # $pid=0, so this is the child my $retval=do_child_code(); exit $retval; } } else { # Oops, fork() returned undef - something is definitely wrong. DieNice("Unable to fork: $!\n"); } sub do_child_code { # Do your time consuming stuff, setting $retval to # a useful number return $retval; }