NAME accessors - create accessor methods in caller's package. SYNOPSIS package Foo; use accessors qw( foo bar baz ); my $obj = bless {}, 'Foo'; # generates chaining accessors: $obj->foo( 'hello ' ) ->bar( 'world' ) ->baz( "!\n" ); print $obj->foo, $obj->bar, $obj->baz; DESCRIPTION The accessors pragma lets you create simple accessors at compile-time. This saves you from writing them by hand, which tends to result in *cut-n-paste* errors and a mess of duplicated code. It can also help you reduce the ammount of unwanted *direct-variable access* that may creep into your codebase when you're feeling lazy. accessors was designed with laziness in mind. Method-chaining accessors are generated by default. This may be changed in future versions! If you want backwards compatability use accessors::chained and wait until the dust settles. See accessors::classic for accessors that always return the current value if you don't like method chaining. GENERATED METHODS accessors will generate methods that return the current object on set: sub foo { my $self = shift; if (@_) { $self->{-foo} = shift; return $self; } else { return $self->{-foo}; } } This way they can be *chained* together. PERFORMANCE There is little-to-no performace hit when using generated accessors; in fact there is usually a performance gain. * typically *10-30% faster* than hard-coded accessors (like the above example). * typically *1-15% slower* than *optimized* accessors (less readable). * typically a *small* performance hit at startup (accessors are created at compile-time). * uses the same anonymous sub to reduce memory consumption (sometimes by 80%). See the benchmark tests included with this distribution for more details. MOTIVATION The main difference between the accessors pragma and other accessor generators is simplicity. * interface use accessors qw( ... ) is as easy as it gets. * a pragma it fits in nicely with the base pragma: use base qw( Some::Class ); use accessors qw( foo bar baz ); and accessors get created at compile-time. * no bells and whistles The module is extensible instead. SUB-CLASSING If you prefer a different style of accessor or you need to do something more complicated, there's nothing to stop you from sub-classing. Look through accessors::classic to start. CAVEATS Classes using blessed scalars or arrays are not supported. THANKS Thanks to Michael G. Schwern for indirectly inspiring this module, and for his feedback & suggestions. Also to Paul Makepeace and David Wright for showing me faster accessors, and to James Duncan and people on London.pm for their feedback. AUTHOR Steve Purkis SEE ALSO accessors::classic, accessors::chained Similar and related modules: base, fields, Class::Accessor, Class::Struct, Class::Methodmaker, Class::Generate, Class::Class, Class::Tangram