Язык программирования Perl
Язык программирования Perl читать книгу онлайн
Курс знакомит с языком программирования Perl, с его принципами, основными возможностями и особенностями в объёме, достаточном, чтобы начать разрабатывать прикладные и системные задачи, включая программирование для сети Интернет.
Курс является достаточно подробным введением в язык программирования Perl. Описывается уникальная культура Perl и особенности, отличающие его от других языков программирования и во многом обусловившие его популярность. Рассматриваются основные средства программирования на языке Perl версии 5.8. Разбираются богатые возможности языка для создания самых разных приложений, а также особый стиль программирования на Perl. Курс ориентирован на студентов, начинающих программистов или разработчиков, применяющих другие языки и желающих писать прикладные или системные программы на Perl.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
В стандартную библиотеку модулей Perl входит модуль Class::Struct, который облегчает жизнь программистам по описанию классов, предоставляя для объявления класса функцию struct(). Эта функция генерирует описание класса в указанном пакете, включая методы для доступа к атрибутам класса. Причем помимо имени атрибута она позволяет задавать его тип с помощью разыменовывающего префикса: скаляр ($), массив (@), хэш (%), ссылка на подпрограмму (&) или объект. Насколько просто и удобно пользоваться функцией struct, можно судить по такому примеру:
use Class::Struct; # подключаем стандартный модуль# описываем класс Performer ("Исполнитель")struct Performer => { # атрибуты класса:name => '$', # "имя" - скалярcountry => '$', # "страна" - скалярartists => '%', # "артисты" - хэш};my $performer = new Performer; # создаем исполнителя$performer->name('Pink Floyd'); # задаем значения атрибутов$performer->country('Great Britain');# заполняем атрибут-хэш:$performer->artists('David Gilmour', 'гитары, вокал');$performer->artists('Roger Waters', 'бас-гитара, вокал');$performer->artists('Nick Mason', 'ударные');$performer->artists('Richard Wright', 'клавишные');# описываем класс Album ("Альбом")struct Album => { # атрибуты класса:title => '$', # "название" - скалярyear => '$', # "год выхода" - скалярtracks => '@', # "композиции" - массивperformer => 'Performer', # "исполнитель" - объект};my $album = Album->new; # создаем альбом$album->title('Dark Side of the Moon');$album->year(1973);# заполняем атрибут-массив:$album->tracks(0, 'Breathe');$album->tracks(1, 'Time');# и так далее...$album->performer($performer); # задаем атрибут-объектЧтобы добавить к полученному описанию класса дополнительный метод, достаточно описать его в соответствующем пакете. Вот пример добавления метода Album::print и его использования в главной программе:
package Album; # переключаемся на нужный пакетsub Album::print { # и описываем дополнительный методmy $self = shift;printf("%s '%s' (%d)n",$self->performer->name, $self->title, $self->year);foreach my $artist (keys%{$self->performer->artists}) {printf("t%s - %sn",$artist, $self->performer->artists($artist));}}package main; # переключаемся на основную программу$album->print; # и вызываем метод объектаВ заключение рассмотрим несколько распространенных приемов для работы с классами и объектами.
Функции bless() не обязательно передавать имя класса: если второго аргумента нет, она помечает объект ссылки именем текущего пакета. Поскольку bless() возвращает значение своего первого аргумента, а подпрограмма возвращает последнее вычисленное значение, то минимальный конструктор может выглядеть так:
sub new { # конструктор экземпляров классаmy $self = {}; # контейнер для атрибутов объектаbless($self); # "благословить" объект ссылки} # и вернуть ссылку (1-й аргумент bless)При создании объекта удобно сразу задавать начальные значения его атрибутов, передавая аргументы конструктору. Если для инициализации атрибутов использовать хэш, то атрибуты можно задавать в любом порядке, а в конструкторе можно определить значения по умолчанию для незаданных атрибутов. Например, так:
my $language = Programming::Language->new(NAME => 'Perl', # имяVERSION => '5.8.7', # версияAUTHOR = 'Larry Wall' # автор);Весьма полезно иметь в классе метод, который преобразовывает значения атрибутов объекта в строку. Такой метод обычно называется as_string() или to_string() и может применяться для отладочной печати состояния объекта. А если его определить в классе-"прародителе", то его можно будет применять к объектам всех унаследованных классов. Если использовать анонимный хэш для хранения значений атрибутов, то такой метод может выглядеть так:
sub to_string { # преобразование значений атрибутов в строкуmy $self = shift;my $string = '{ ';foreach (keys %{$self}) {$string .= "$_: '$self->{$_}' ";}$string .= '}';return $string;}Благодаря тому, что Perl - это динамический язык, в нем легко создать класс, в котором свойства объектов добавляются во время выполнения программы. Для этого в классе описываются универсальные методы для работы со свойствами объекта, а затем в ходе выполнения задаются нужные свойства. Например, так:
