On 6/22/07, Mathew Snyder <[EMAIL PROTECTED]> wrote: snip
I'm not sure what you mean by "Change your new() in a new() and init()".
snip
What do you mean by "set/get approach"?
snip
Some people believe that new should just create a new blank object and call an init method to do setup. There are good arguments both ways. Manually writing Accessor, Mutator, Getter, or Setter methods sucks and is error prone. It is often better to write one getter and one setter that gets or sets the field(s) passed to it. Another method is to use Perl's autoload capability to magically create subroutines for you. Starting with some Perl in the 5.8 line the autoload function gained the ability to be an lvalue, so I have written it that way. Perl script: #!/usr/bin/perl use strict; use warnings; use Report; my $rpt = Report->new; $rpt->set({id => 5, queue => 10}); print $rpt->printable; my ($id, $queue) = $rpt->get(qw(id queue)); print "id is $id and queue is $queue\n"; #same thing, but I like the => better $rpt->set("id", 6); $rpt->set(id => 6); print "id is now ", $rpt->get("id"), "\n"; $rpt->id = 7; print "id is now ", $rpt->id, "\n"; Module: package Report; use strict; use warnings; use Carp; our $AUTOLOAD; our %fields = ( _id => 1, _queue => 1, _owner => 1, _priority => 1, _worked => 1, _timeLeft => 1, _due => 1, _created => 1, _updated => 1, _severity => 1, _ccl => 1, ); #minimal new sub new { my $class = shift; my $self = bless {}, $class; $self->init(@_); return $self; } #real object creation happens here sub init { my $self = shift; my @fields = keys %fields; @[EMAIL PROTECTED] = (undef) x @fields; } sub _validate_field { my ($self, $k) = @_; croak "$k is not a valid field for " . ref $self unless $fields{"_$k"}; } #Getter/setter method 1 sub get { my ($self, @k) = @_; my @ret; for my $k (@k) { $self->_validate_field($k); push @ret, $self->{"_$k"}; } local $" = ' ::: '; return @ret } sub set { my $self = shift; croak "bad number of arguments" unless @_ == 2 or @_ == 1; if (@_ == 2) { $self->_validate_field($_[0]); return $self->{"_$_[0]"} = $_[1]; } croak "not a hash reference" unless ref $_[0] eq 'HASH'; my $h = $_[0]; my @ret; for my $k (keys %$h) { $self->_validate_field($k); push @ret, $self->{"_$k"} = $h->{$k}; } return @ret; } #another form of setter/getter sub AUTOLOAD : lvalue { my ($k) = $AUTOLOAD =~ /::(.*?)$/; return if $k eq 'DESTROY'; my $self = shift; $self->_validate_field($k); $self->{"_$k"}; } sub printable { my ($self) = @_; # return Printable Report info return $self->id . " " . $self->queue . "\n"; } 1; -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] http://learn.perl.org/