examples/oop/employee01/script/person.pl
use strict;
use warnings;
use v5.10;

use Person;
use Employee;
use DateTime;

my $student = Person->new( name => 'Foo' );
say $student->name;     # Foo

my $programmer = Employee->new( name => 'Bar' );
say $programmer->name;  # Bar
examples/oop/employee01/lib/Person.pm
package Person;
use strict;
use warnings;

sub new {
    my ($class, %args) = @_;

    my $self = \%args;

    bless $self, $class;

    return $self;
}

sub name {
    my ($self, $value) = @_;
    if (@_ == 2) {
        $self->{name} = $value;
    }

    return $self->{name};
}

1;

examples/oop/employee01/lib/Employee.pm
package Employee;
use strict;
use warnings;

# use base 'Person';

use parent 'Person';

# our @ISA = ('Person');

1;