Списал из учебника примеры кодов работы с классами.
В первом случае при наследовании одним классом методов другого программа, использующая первый класс, работает нормально. Но если в этом классе определить свой метод, то программа его не находит.
Вот реализация первого класса:
Код:
package Hourly;
use Employee;
our @ISA = qw(Employee);
sub new
{
my $object = shift();
my $class = ref($object) || $object;
my $self = $class->SUPER::new();
$self->{rate} = undef;
bless($self, $class);
return $self;
}
sub rate { Тут реализация метода}
1;
Реализацию второго класса и программы я приводить не буду. Вот что пишет мне при выполнении:
Код:
Can't locate object method "rate" via package Employee at __ line __
И второй случай с сокрытием данных.
Код:
package EmployeeClosure;
sub new
{
my $object = shift();
my $class = ref($object) || $object;
my $employee = {firstname => shift(), lastname => shift()};
my $hireDay = new Date;
if ($_[0]) {
my ($month, $day, $year) = split(/\//, $_[0]);
$hireDay->day($day);
$hireDay->month($month);
$hireDay->year($year);
}
my $self = sub {
my $field = shift();
$employee->{$field} = shift() if (@_);
return $employee->($field);
};
bless ($self, $class);
return $self;
}
Выдает:
Код:
Not a CODE reference at __ line 22; ( это строка return $employee->($field);)
Тут у меня вообще пока соображений нет.