package GRID::Machine::MakeAccessors;
use strict;
use warnings;
=head1 NAME
GRID::Machine::MakeAccessors - Home Made "Make accessors" for a Class
=head1 METHODS
=head2 sub make_accessors
GRID::Machine::MakeAccessors::make_accessors($package, @legalattributes)
Builds getter-setters for each attribute
=head2 sub make_constructor
GRID::Machine::MakeAccessors::make_constructor($package, %legalattributes)
=cut
sub make_accessors { # Install getter-setters
my $package = caller;
no strict 'refs';
for my $sub (@_) {
*{$package."::$sub"} = sub {
my $self = shift;
$self->{$sub} = shift() if @_;
return $self->{$sub};
};
}
}
sub make_constructor { # Install constructor
my $package = caller;
my %legal = @_;
no strict 'refs';
*{$package."::new"} = sub {
my $class = shift || die "Error: Provide a class\n";
my %args = (%legal, @_);
my $a = "";
die "Illegal arg $a\n" if $a = first { !exists $legal{$_} } keys(%args);
bless \%args, $class;
};
}
1;