NAME
    reform - Third millenium syntax for Perl 5 OOP

SYNOPSIS
        use reform;

        package Class < Base;

        fields foo,
               bar,
               baz;

        sub initialize($foo, $bar, $baz)
        {
            base->initialize($foo);
            self->foo = $foo;
            self->bar = $bar;
            self->baz = $baz;
        }

        sub method
        {
            print "Hi there";
            class->static_method();
        }

        sub get_foo
        {
            print "Getting self->foo!";
            return self->{foo};
        }

        sub set_foo($value)
        {
            print "Setting self->foo!";
            self->{foo} = $value;
        }

DESCRIPTION
    This module provides a less awkward syntax for Perl 5 OOP. "reform" must
    be the first thing to be used in your code, even above your package
    declaration.

  Shorthand inheritance

    Rather than using the cumbersome "use base 'Parent'" you may write:

        package Child < Parent;

  Shorthand parameters

    It is no longer necessary to fish method parameters out of "@_":

        sub method($foo, $bar)
        {
            print "First param: $foo";
            print "Second param: $bar";
        }

  Implicit self, class and base

    References to the instance, the class (package) and the base class are
    implicitely provided as "self", "class" and "base":

        sub method
        {
            self->instance_method();
            class->static_method();
            base->super_class_method();
        }

  Pretty field accessors

    You may omit the curly brackets in "self->{foo}" if you declare your
    field names using "fields":

        fields foo, bar;

        sub method {
            self->foo = "some value";
            print self->foo;
        }

    You may intercept read and write access to instance fields by
    overwriting getter and setter methods:

        fields foo;

        sub get_foo
        {
            print "Getting foo!";
            return self->{foo};
        }

        sub set_foo($value)
        {
            print "Setting foo!";
            self->{foo} = $value;
        }

    Note that you must wrap the field names in curly brackets to access the
    actual "self->{foo}" inside of getter and setter methods.

  Clean constructors

    All reformed packages inherit a basic constructor "new" from the "Class"
    package. When you need custom contructors, don't overwrite "new" -
    overwrite "initialize":

        use reform;
        package Amy;

        fields foo,
               bar;

        sub initialize($foo)
        {
            self->foo = $foo;
        }

    You may call the constructor of a base class by calling
    "base->initialize()".

  Dynamically adding field accessors

    When you need to dynamically add field accessors, use
    "self->add_field($field)":

        sub method
        {
            self->add_field('boo');
            self->boo = 55;
        }

    Note that all objects constructed after a use of "add_field" will also
    bear the new accessors.

    You may request a list of all fields currently assigned to a class by
    calling "self->fields" or "class->fields";

INSTALLING
    This package should have come with three files: "reform.pm",
    "reform/implicit.pm" and "reform/Property.pm".

    The only somewhat exotic CPAN package you will need to run this is
    "Filter::Simple"
    <http://search.cpan.org/~dconway/Filter-Simple-0.79/lib/Filter/Simple.pm
    >. This package comes included with Perl 5.8, so you only need to act
    when you're running Perl 5.6.

  Installing Filter::Simple on Windows

    Open a command prompt and type:

        ppm install Filter
        ppm install Text-Balanced

    Now copy the document at
    http://search.cpan.org/src/DCONWAY/Filter-Simple-0.79/lib/Filter/Simple.
    pm to "c:\perl\site\lib\Filter\Simple.pm" or wherever you store your
    packages.

  Installing Filter::Simple anywhere else

    I guess copying "Filter::Util::Call", "Text::Balanced", "Filter::Simple"
    and all their prerequisites from CPAN should work.

EXPORTS
    "self", "class", "base".

BUGS
    Plenty I'm sure.

UPDATES
	Will be posted to CPAN.

COPYRIGHT
    Copyright (C) 2004 Henning Koch. All rights reserved.

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

AUTHOR
    Henning Koch <jaz@netalive.org>