# Accessor_Factory.pm use strict; use warnings; package Accessor_Factory; 1; # appease the wrath of require sub make_getsets { my @fields = @_; my $class = caller; for my $field ( @fields ) { my $code = < 1; \$self->{ $field } = shift if \@_; \$self->{ $field }; } } 1; EOCODE eval $code or die $@; } return; } __END__ #### # Foo.pm use strict; use warnings; package Foo; 1; BEGIN { use Accessor_Factory; Accessor_Factory::make_getsets( qw( bar baz ) ); } sub new { return bless +{}, shift; } __END__ #### # demo.pl use strict; use warnings; use Foo; my $foo = Foo->new(); $foo->bar = 1; print $foo->bar, "\n"; $foo->bar += 2; print $foo->bar, "\n"; $foo->bar( 5 ); print $foo->bar, "\n"; print $foo->baz = 8, "\n"; print $foo->baz *= 11, "\n"; print $foo->baz( 100 ), "\n"; __END__ #### 1 3 5 8 88 100