Managing Instance Data
Most classes create objects that are essentially just data structures with several internal data fields (instance variables), plus methods to manipulate them.
Perl classes inherit methods, not data, but as long as all access to
the object is through method calls anyway, this works out fine. If you
want data inheritance, you have to effect it through method inheritance.
By and large, this is not a necessity in Perl, because most classes store
the attributes of their object in an anonymous hash. The object’s instance
data is contained within this hash, which serves as its own little
namespace to be carved up by whatever classes do something with the
object. For example, if you want an object called $city to have a data field named elevation, you can simply access $city–>{elevation}. No declarations are
necessary. But method wrappers have their uses.
Suppose you want to implement a Person object. You decide to have a data field
called “name”, which by a strange coincidence you’ll store under the key
name in the anonymous hash that will
serve as the object. But you don’t want users touching the data directly.
To reap the rewards of encapsulation, users need methods to access that
instance variable without lifting the veil of abstraction.
For example, you might make a pair of accessor methods:
sub get_name {
my $self = shift;
return $self–>{name};
}
sub set_name {
my $self = shift;
$self–>{name} = shift;
}which leads to code like this:
$him = Person–>new(); $him–>set_name("Frodo"); ...Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access