4.1. Example

Here's an example class with some accessors and a script that uses it:

package Person;

use strict;
use warnings;

sub new
{
    my $class = shift;

    my $self = {};
    bless $self, $class;

    $self->_init(@_);

    return $self;
}

sub _init
{
    my $self = shift;
    my $args = shift;

    $self->_first_name($args->{'first_name'});
    $self->_last_name($args->{'last_name'});

    $self->_age($args->{'age'});

    return;
}

sub _first_name
{
    my $self = shift;

    if (@_)
    {
        my $new_first_name = shift;
        $self->{'_first_name'} = $new_first_name;
    }

    return $self->{'_first_name'};
}

sub _last_name
{
    my $self = shift;

    if (@_)
    {
        my $new_last_name = shift;
        $self->{'_last_name'} = $new_last_name;
    }

    return $self->{'_last_name'};
}

sub _age
{
    my $self = shift;

    if (@_)
    {
        my $new_age = shift;
        $self->{'_age'} = $new_age;
    }

    return $self->{'_age'};
}

sub greet
{
    my $self = shift;

    print "Hello ", $self->_first_name(), " ", $self->_last_name(), "\n";

    return;
}

sub increment_age
{
    my $self = shift;

    $self->_age($self->_age()+1);

    return;
}

sub get_age
{
    my $self = shift;

    return $self->_age();
}

1;
#!/usr/bin/env perl

use strict;
use warnings;

use Person;

my $shlomif =
    Person->new(
        {
            first_name => "Shlomi",
            last_name => "Fish",
            age => 32,
        }
    );

$shlomif->greet();
$shlomif->increment_age();

print "Happy Birthday, Shlomi, your age is now ", $shlomif->get_age(), ".\n";

my $newton =
    Person->new(
        {
            first_name => "Isaac",
            last_name => "Newton",
            age => 366,
        }
    );

$newton->greet();
print "Newton would have been ", $newton->get_age(),
    " years old today if he had been alive.\n"
    ;

Written by Shlomi Fish