В заключение рассмотрим небольшой пример, поясняющий некоторые вопросы, рассмотренные в этой части.
#!/usr/bin/perl package Staff; sub new {
my ($class, $data) = @_;
my $self = $data;
bless $self, $class;
return $self; } sub setdata {
my ($self,$data) = @_;
for $i (keys %$data) {
$self->{$i}=$data->{$i};
}
return $self; } sub showdata {
my $self = shift;
my @keys = @_ ? @_ : sort keys %$self;
fоreach $key (@keys) {
print "\t$key => $self->{$key}\n";
}
return $self; } sub AUTOLOAD {
print "пакет Staff: отсутствует функция $AUTOLOAD\n"; } sub DESTROY {
print "Удаляется объект класса Staff\n"; }
######################################
package Graduate; @ISA = (Staff); sub new {
my ($class, $data) = @_;
# наследование переменной объекта
my $self = Staff->new($data);
$self->{"образование"}="высшее";
bless $self, $class;
return $self; } sub showdata {
my $self = shift;
return $self if ($self->{"образование"} no "высшее");
my @keys = sort keys %$self;
foreach $key (@keys) {
print "\t$key => $self->{$key}\n";
}
return $self; } sub DESTROY {
my $self= shift;
$self->SUPER::DESTROY;
print "Удаляется объект класса Graduate\n";
######################################
package main;
$someone=Graduate->new({ "фамилия" => "Кузнецов", "имя" => "Николай" });
$somebody=Staff->new({"фамилия" => "Петрова", "имя" => "Анна"});
$someone->showdata;
$somebody->Graduate::showdata;
$someone->getdata;
Для простоты все классы расположены в одном файле. Если класс занимает отдельный модуль, необходимЬчхрзабхшпъся об управлении экспортом имен при помощи списков @EXPORT и @EXPORT_OK, а также о подключении соответствующих модулей к вызывающей программе (см. здесь).
В данном примере определен пакет main и два класса: staff и Graduate, staff является базовым классом Graduate.