Class::Gomor::Hash - class and object builder, hash version |
Class::Gomor::Hash - class and object builder, hash version
# Create a base class in BaseClass.pm package My::BaseClass;
require Class::Gomor::Hash; our @ISA = qw(Class::Gomor::Hash);
our @AS = qw(attribute1 attribute2); our @AA = qw(attribute3 attribute4); our @AO = qw(other);
# You should initialize yourself array attributes sub new { shift->SUPER::new(attribute3 => [], attribute4 => [], @_) }
# Create accessors My::BaseClass->cgBuildAccessorsScalar(\@AS); My::BaseClass->cgBuildAccessorsArray(\@AA);
sub other { my $self = shift; @_ ? $self->{'other'} = [ split(/\n/, shift) ] : @{$self->{'other'}}; }
1;
# Create a subclass in SubClass.pm package My::SubClass;
require My::BaseClass; our @ISA = qw(My::BaseClass);
our @AS = qw(subclassAttribute);
My::SubClass->cgBuildAccessorsScalar(\@AS);
sub new { shift->SUPER::new( attribute1 => 'val1', attribute2 => 'val2', attribute3 => [ 'val3', ], attribute4 => [ 'val4', ], other => [ 'none', ], subclassAttribute => 'subVal', ); }
1;
# A program using those classes
my $new = My::SubClass->new;
my $val1 = $new->attribute1; my @values3 = $new->attribute3; my @otherOld = $new->other;
$new->other("str1\nstr2\nstr3"); my @otherNew = $new->other; print "@otherNew\n";
$new->attribute2('newValue'); $new->attribute4([ 'newVal1', 'newVal2', ]);
This class is a subclass from Class::Gomor. It implements objects as hash references, and inherits methods from Class::Gomor.
See Class::Gomor.
Another thing to note, there is no catch for cycling references (when you link two objects with each others). You have been warned.
Patrice E<lt>GomoRE<gt> Auffret
=head1 COPYRIGHT AND LICENSE
Copyright (c) 2004-2006, Patrice E<lt>GomoRE<gt> Auffret
You may distribute this module under the terms of the Artistic license. See LICENSE.Artistic file in the source distribution archive.
Class::Gomor::Hash - class and object builder, hash version |