in reply to OOP's setter/getter method - is there a way to avoid them?

That is a great book. I read it several times, and foundation of the knowledge I have of references to this day is owed to that book.

Personally, unless absolutely necessary, I try to stay away from having to set attributes individually. I prefer to try to set these within larger public methods that set/reset the attribute then do something functional with it, like this:

sub write_graffiti { my $self = shift; my %params = @_; $self->{colour} = $params{colour} if defined $params{colour}; # spray paint wall with the colour, # whether new or existing }

When I do need to expose a direct setter/getter for an individual attribute, I do both in one fell swoop, in a more generic sub:

sub colour { my $self = shift; my $colour = shift if @_; $self->{colour} = $colour if defined $colour; return $self->{colour}; }