Иллюстрированный самоучитель по 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, а также о подключении соответствующих модулей к вызывающей программе.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.