NAME Class::Frame - Class template with default constructor and accessors autogenerated SYNOPSIS In class Sith: -------------- package Sith; use strict; use base qw( Class::Frame ); use Class::Frame; DEFINE_FIELDS( name => 'Palpatine', occupation => 'Sith Lord', weapon => [ 'The Force', 'Lightsaber' ] ); 1; In a galaxy far far away: ------------------------- use Sith; # Difficult to see the Dark Side is . . . my $emperor = Sith->new( name => 'Palpatine', occupation => 'Senator' ); # Get name attribute print $emperor->name(); # Another way of getting name print $emperor->get_name(); # Revealed itself the Dark Side has . . . $emperor->set_name('Darth Sidios'); $emperor->set_points(120); $emperor->set_occupation('Sith Lord'); # Get default value for occupation field in Sith class my $occupation = $emperor->get_occupation_default(); . . . Subclassing Sith: ----------------- package Sith::Lord; use base qw( Sith ); sub new { my $pkg = shift; my @args = @_; my $self = $pkg->SUPER::new(@args); bless $self, $pkg; } . . . ABSTRACT This is 'yet another accessor creation helper' module but its different ( of course :-)). For the class using Class::Frame as a base class it automatically creates default constructor wich accepts field values as input parameters and if some or all of the parameters were not set - uses default values specified during class structure declaration ( please see below for more details ). Also it creates three methods for each field: accessor ('get'), mutator ('set') and 'shortcut' method ( $obj-> is the same as $obj->get_ ). Supports further subclassing of Class::Frame derived class. DESCRIPTION Learn Class::Frame in 5 seconds! To start using Class::Frame as base class you will need to make 8, err, 2 easy steps :-) 1) Create your class package Jedi; use strict; use base qw( Class::Frame ); use Class::Frame; # Exports DEFINE_FIELDS helper function # Accepts a hash of field names with default values # that can be scalars or references to anything # ( array, hash, object ). If field doesn't have default # value - set it to undef DEFINE_FIELDS( name => undef, points => 140, weapon => Jedi::Weapon::Lightsaber ); 2) In your code there you are going to use My::Class: use Jedi; . . . # Create instance of My::Class and override default name value my $kit_fisto = Jedi->new(name => 'Kit Fisto'); $kit_fisto->weapon->activate(); . . . Class Declaration DEFINE_FIELDS( => , ... ) This method creates accessors and constructor for the class it has been called from. Input - hash of fields and their default_values. If default value is undef please specify so EXPLICITLY Generated constructor new( [ => [ , ... ]] ) Creates new instance of class derived from Class::Frame. Accepts a hash containing field names as keys and field initializing values as values. If field has init value then its default value will be overriden, otherwise - default value will be used (if provided in class declaration). Accessors Gets field value Example: my $jedi_name = $jedi->name; get_ Another way to get field value Examle: my $jedi_name = $jedi->get_name; get__default Gets field default value from class declaration Examle: my $default_weapon = $jedi->get_weapon_default; set_( ) Sets field to value passed even if it is 'undef' ( which sometimes is handy ) Example: $jedi->set_weapon(Jedi::Weapon::DualBladeLightSaber->new()); $jedi->set_dark_side_points(undef); BUGS Please report them SEE ALSO Class::Accessor AUTHOR Denys Vorobyov, COPYRIGHT AND LICENSE Copyright 2005 by Denys Vorobyov This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.