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" . 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. REVISION HISTORY 0.2: Fixed default getter/setter methods. Thanks to Brian Franchuk for reporting the problem. 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