Steven Lembark


Object::Wrapper::Fork -- Practice safe forks: use a hat.


    pacakge My;

    # parent is lighter weight than base if it
    # is available.

    use parent qw( Object::Wrapper::Fork );

    sub cleanup
        # validate 

        my ( $object, $pid ) = @_;

        if( $pid == $$ )
            # clean up within same process
            # clean up post-fork.

    sub new
        # build the object Your Way. 
        # Object::Wrapper::Fork supplies the pid 
        # ($$) when wrapping and AUTOLOAD to 
        # validate it againsed the current pid.

        my $object  = UnforkSafe->new( @blah );

        __PACKAGE__->SUPER::new( $object )


Use Safe Forks: Wear a hat.

Any number of modules cannot gracefully handle re-use across forks. This module provides a simple wrapper that re-validates the pid on calls and calls a cleanup handler with the original PID when destroyed.

The bulk of the work is done in AUTOLOAD, which re-validates the pid and passes the original object by reference for each call made (i.e., modifications to the object via $_[0] are propagated).

DESTROY calls the wrapped object with its original pid, which can be compared to $$ for appropriate behavior. Passing the PID pback can simplify logging messages or help packages that track PID's.



This takes a reference to the object or package being wrapped and returns the wrapper. It would normaly be called from the wrapped objects constructor:

    sub Your::Constructor
        my $proto   = shift;

        my $thingy  = $madness->$method( @argz );

        $proto->SUPER::new( $thingy )


Tied Objects

This will not handle tied objects gracefully. If you're into BSDM then you're out of luck here. Sorry.



Generic constructor takes list of arguments added to the object for validation by its AUTOLOAD and cleanup methods.


Fork wrapper for DBI database handles. Supplies a "connect" method and cleanup handler for dealing with CackedKids and InactiveDestroy vs. finish/disconnect.


Steven Lembark <>


Copyright (C) 2009 Steven Lembark. This module is released under the same terms as Perl-5.10.0 itself.

1 POD Error

The following errors were encountered while parsing the POD:

Around line 139:

You forgot a '=back' before '=head1'