Иллюстрированный самоучитель по Perl



         

Обобщающий пример


В заключение рассмотрим небольшой пример, поясняющий некоторые вопросы, рассмотренные в этой части.

#!/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.




Содержание  Назад  Вперед