NAME
    Class::InsideOut - a safe, simple inside-out object construction kit

SYNOPSIS
     package My::Class;
 
     use Class::InsideOut qw( property register );
     use Scalar::Util qw( refaddr );

     # declare a lexical property hash with 'my'
     property my %name; 

     sub new {
       my $class = shift;
       my $self = \do {my $scalar};
       bless $self, $class;
   
       # register the object for thread-safety
       register( $self ); 
     }

     sub name {
       my $self = shift;
       if ( @_ ) { 
   
         # use 'refaddr' to access properties for an object
         $name{ refaddr $self } = shift;
     
         return $self;
       }
       return $name{ refaddr $self };
     }
 
     sub greeting {
       my $self = shift;
       print "Hello, my name is " . $name { refaddr $self } . "\n";
     }

DESCRIPTION
    This is an alpha release for a work in progress. It is a functional but
    incomplete implementation of a simple, safe and streamlined toolkit for
    building inside-out objects. Unlike most other inside-out object
    building modules already on CPAN, this module aims for minimalism and
    robustness. It uses no source filters, no attributes, supports foreign
    inheritance, does not leak memory, is overloading-safe, is thread-safe
    for Perl 5.8 or better and should be mod_perl compatible.

    In its current state, it provides the minimal support necessary for safe
    inside-out objects. All other implementation details, including writing
    a constructor and accessors, are left to the user. Future versions will
    add basic accessor support and serialization support.

  Inside-out object basics

    To be written.

USAGE
  Importing `Class::InsideOut'

    To be written.

  Declaring and accessing object properties

    To be written.

  Object destruction

    To be written.

  Foreign inheritance

    To be written.

  Serialization

    To be written.

  Thread-safety

    To be written.

FUNCTIONS
  `property'

      property my %name;

    Declares an inside-out property. The argument must be a lexical hash,
    though the `my' keyword can be included as part of the argument rather
    than as a separate statement. No accessor is created, but the property
    will be tracked for memory cleanup during object destruction and for
    proper thread-safety.

  `register'

      register $object;

    Registers an object for thread-safety. This should be called as part of
    a constructor on a object blessed into the current package. Returns the
    object (without modification).

  `CLONE'

    `CLONE' is automatically exported to provide thread-safety to modules
    using `Class::InsideOut'. See perlmod for details. It will be called
    automatically by Perl if threads are in use and a new interpreter thread
    is created. It should never be called directly.

  `DESTROY'

    This destructor is automatically exported to modules using
    `Class::InsideOut' to clean up object property memory usage during
    object destruction. It should never be called directly. In the future,
    it will be enhanced to support a user supplied `DEMOLISH' method for
    additional, custom destruction actions.

SEE ALSO
    *   Object::InsideOut -- Currently the most full-featured, robust
        implementation of inside-out objects, but foreign inheritance is
        handled via delegation. Highly recommended if a more full-featured
        inside-out object builder is needed.

    *   Class::Std -- Despite the name, does not reflect best practices for
        inside-out objects. Does not provide thread-safety with CLONE, is
        not mod_perl safe and doesn't support foreign inheritance.

    *   Class::BuildMethods -- Generates accessors with encapsulated storage
        using a flyweight inside-out variant. Lexicals properties are
        hidden; accessors must be used everywhere.

    *   Lexical::Attributes -- The original inside-out implementation, but
        missing some key features like thread-safety. Also, uses source
        filters to provide Perl-6-like object syntax.

    *   Class::MakeMethods::Templates::InsideOut -- Not a very robust
        implementation. Not thread-safe. Not overloading-safe. Has a steep
        learning curve for the Class::MakeMethods system.

    *   Object::LocalVars -- My own original thought experiment with
        'outside-in' objects and local variable aliasing. Not
        production-safe and offers very weak encapsulation.

BUGS
    Please report bugs using the CPAN Request Tracker at
    http://rt.cpan.org/NoAuth/Bugs.html?Dist=Class-InsideOut

    When submitting a bug or request, please include a test-file or a patch
    to an existing test-file that illustrates the bug or desired feature.

AUTHOR
    David A. Golden (DAGOLDEN)

    dagolden@cpan.org

    http://dagolden.com/

COPYRIGHT
    Copyright (c) 2006 by David A. Golden

    This program is free software; you can redistribute it and/or modify it
    under the same terms as Perl itself.

    The full text of the license can be found in the LICENSE file included
    with this module.

