Язык программирования Perl
Язык программирования Perl читать книгу онлайн
Курс знакомит с языком программирования Perl, с его принципами, основными возможностями и особенностями в объёме, достаточном, чтобы начать разрабатывать прикладные и системные задачи, включая программирование для сети Интернет.
Курс является достаточно подробным введением в язык программирования Perl. Описывается уникальная культура Perl и особенности, отличающие его от других языков программирования и во многом обусловившие его популярность. Рассматриваются основные средства программирования на языке Perl версии 5.8. Разбираются богатые возможности языка для создания самых разных приложений, а также особый стиль программирования на Perl. Курс ориентирован на студентов, начинающих программистов или разработчиков, применяющих другие языки и желающих писать прикладные или системные программы на Perl.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
my $class = 'Hobbit'; # имя класса в виде строки
my $object = { }; # ссылка на анонимный хэш,
# где будут храниться данные объекта,
bless($object, $class); # "благословляется" указывать
# на объект класса $class
Для примера опишем класс "Личность" (Person), сохранив его в файле Person.pm. Начало описания класса будет выглядеть так:
package Person; # класс - это пакет
sub new { # метод-конструктор объектов
my $class = shift; # 1-й параметр ссылка на имя класса
my $self = {}; # контейнер для атрибутов объекта
$self->{name} = ''; # начальные значения атрибутов
bless($self, $class); # "благословить" объект ссылки
return $self; # вернуть ссылку на созданный объект
}
Затем в описании класса обычно определяются методы для доступа к атрибутам объекта. Для примера определим метод для доступа (accessor) к атрибуту 'name' ("имя") и метод для изменения его значения (modifier).
sub say_name { # метод доступа (accessor) к атрибуту name
my ($self) = @_; # получить ссылку на объект
return $self->{name}; # вернуть значение атрибута
}
sub give_name { # метод изменения (modifier) атрибута name
my $self = $_[0]; # 1-й аргумент: ссылка на объект
$self->{name} = $_[1]; # 2-й аргумент: новое значение
}
1; # истинное значение требуется для use
__END__ # конец описания класса
В классе описываются методы для работы с атрибутами объектов класса, причем часто один метод используется для чтения и для изменения значения атрибута. В примере опишем метод для чтения и записи (mutator) свойства 'height' ("рост"):
sub height { # метод чтения и записи атрибута height
my $self = shift; # извлечь ссылку на объект
$self->{height} = shift # присвоить новое значение,
if @_; # если передан аргумент
return $self->{height}; # вернуть значение атрибута
}
Обратите внимание, что описание класса значительно проще, чем описание традиционного модуля. Для работы с классом не требуется никаких списков экспортирования имен. Вместо этого описываются методы, которые можно рассматривать как сервисы, предоставляемые классом для взаимодействия с каждым из конкретных экземпляров класса. Набор методов для управления поведением объекта называют его интерфейсом. Для работы с объектами класса достаточно знать этот интерфейс, не вдаваясь в детали реализации поведения объектов.
В программе, в которой применяются объекты описанного класса, мы увидим вполне знакомую нотацию, когда подпрограммы вызываются при помощи ссылочных переменных и операции ->. В объектной терминологии это называется обращением к методам объектов (или отправка сообщения объекту). Приведем пример создания двух объектов одного класса, каждый из которых обладает собственными значениями свойств:
# способ обращения к методам через ссылки на объекты
use Person; # будем использовать этот класс
# создать объект класса,
my $hobbit = Person->new(); # вызвав его конструктор
# задать значение свойства, обратившись к методу объекта
$hobbit->give_name('Фродо Бэггинс');
# создать другой объект
my $dwarf = Person->new; # () не обязательны
$dwarf->give_name('Гимли'); # задать значение свойства
# запросить значения свойств, обратившись к методам
print $hobbit->say_name(), ' ', $dwarf->say_name, "n";
Взаимодействие с объектом строится на обращении к его методам. Обращение к методу происходит при помощи ссылки на экземпляр конкретного объекта, и при этом первым аргументом в метод автоматически передается ссылка на этот объект. Например:
$hobbit->give_name('Бильбо Бэггинс'); # соответствует вызову:
Person::give_name($hobbit, 'Бильбо Бэггинс');
Внутри метода ссылка на экземпляр объекта используется для доступа к данным этого экземпляра и обращения к другим методам. Для обращения к конструктору используется имя класса, так как во время работы конструктора уже существует класс, а экземпляр объекта только должен быть создан конструктором.
Если к ссылке на объект класса Person применить функцию ref(), то она вернет значение не 'HASH', как можно было бы предположить, а 'Person'! Это результат "благословения" объекта ссылки функцией bless().
print "Класс объекта: '", ref($hobbit), "'n"; # 'Person'
Кроме нотации с оператором "стрелка" ->, традиционно используемой при работе со ссылками, для доступа к методам применяются синтаксические конструкции с использованием косвенных объектов. При использовании этого стиля имя метода стоит перед именем класса или ссылкой на объект, после которой идет список аргументов, иногда заключаемый в круглые скобки. Использование косвенных объектов может сделать текст программы более наглядным и понятным. Приведем пример обращения к объектам в новом стиле:
# способ обращения к методам через косвенные объекты
use Person; # используем класс Person
my $magician = new Person; # "этот маг - новая личность"
give_name $magician 'Гэндальф'; # "назовем мага 'Гэндальф'"
my $name = say_name $magician; # "назови себя, маг"
print $name, "n";