The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Acme::Spork - Perl extension for spork()ing in your script

SYNOPSIS

  use Acme::Spork;
  spork(\&long_running_code, @ARGV);
  print "Long running code has been started, bye!\n";

DESCRIPTION

A spork in plastic sense is a fork combined with a spoon. In programming I've come to call a spork() a fork() that does more than just a fork.

I use it to describe when you want to fork() to run some long running code but immediately return to the main program instead of waiting for it.

spork()

The first argument is a code ref that gets executed and any other args are passed to the call to the code ref.

    #!/usr/bin/perl

    use strict;
    use warnings;
    use Acme::Spork;

    print 1;
    spork( 
        sub { 
            sleep 5;
            open my $log_fh, '>>', 'spork.log', or die "spork.log open failed: $!";
            print {$log_fh} "I am spork hear me spoon\n"; 
            close $log_fh;
        },
    );
    print 2;

This prints out "12" immediately and is done running, now if you tail -f spork.log you'll see "I am spork hear me spoon\n" get written to it 4 or 5 seconds later by the spork()ed process :)

daemonize()

Since many daemons need to spork a child process when a request is received I've included a cheat function to daemonize your script execution.

Its simply a wrapper for Proc::Daemon::Init.

    use Acme::Spork qw(daemonize);

    # make sure we are the only one running:
    use Unix::Pid '/var/run/foo.pid';

    # if so make me a daemon:
    daemonize();

    # and handle requests as a server:
    while(<$incoming_requests>) {
        spork(\&log_request($_));
        spork(\&handle_request($_));
    }
    

EXPORT

spork() is by default, daemonize() can be.

SEE ALSO

Proc::Daemon is not used unless you call daemonize().

Unix::PID is not used at all in this module except the daemonize() example. I figured if you were using this module you many be interested in it as well :)

ATTN modules@perl.org

I'd love to have this registered if you could find it in your heart :)

http://www.xray.mpe.mpg.de/mailing-lists/modules/2005-12/msg00154.html

AUTHOR

Daniel Muey, http://drmuey.com/cpan_contact.pl

COPYRIGHT AND LICENSE

Copyright (C) 2006 by Daniel Muey

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.6 or, at your option, any later version of Perl 5 you may have available.