Оглавление
Вступительное слово
Предисловие
Глава 1. Введение
Что вы должны знать?
Как быть со сносками?
Как быть с упражнениями?
Что делать, если я преподаю Perl?
Глава 2. Основы
Операторы списков
Организация ловушек ошибок с помощью eval
Исполнение программного кода, созданного динамически
Упражнения
Глава 3. Модули
Стандартный дистрибутив
Использование модулей
Функциональные интерфейсы
Как составить список импорта
Объектно-ориентированные интерфейсы
Типичный объектно-ориентированный модуль Math:BigInt
Единая архивная сеть Perl
Установка модулей из CPAN
Настройка списка каталогов для поиска модулей
Упражнения
Глава 4. Введение в ссылки
Выполнение однотипных действий с разными массивами
Ссылки на массивы
Разыменование ссылок на массивы
Избавляемся от фигурных скобок
Модификация массивов
Вложенные структуры данных
Упрощаем доступ к вложенным структурам с помощью стрелок
Ссылки на хеши
Упражнения
Глава 5. Ссылки и области видимости
Несколько ссылок на данные
А если это было имя структуры?
Подсчет ссылок и вложенные структуры данных
Ошибки при подсчете ссылок
Создание анонимных массивов
Создание анонимных хешей
Автовивификация
Автовивификация и хеши
Упражнения
Глава 6. Управление сложными структурами данных
Использование отладчика для просмотра данных со сложной структурой
Просмотр данных со сложной структурой с помощью модуля Data::Dumper
YAML
Сохранение данных со сложной структурой с помощью модуля Storable
Операторы grep и map
Обходное решение
Выбор и модификация данных со сложной структурой
Упражнения
Глава 7. Ссылки на подпрограммы
Ссылки на именованные подпрограммы
Анонимные подпрограммы
Подпрограммы обратного вызова
Замыкания
Подпрограмма как возвращаемое значение другой подпрограммы
Использование переменных замыканий для ввода данных
Переменные замыканий как статические локальные переменные
Упражнения
Глава 8. Ссылки на дескрипторы файлов
Старый способ
Улучшенный способ
Способ еще лучше
IO::Handle
Ссылки на дескрипторы каталогов
Упражнения
Глава 9. Практические приемы работы со ссылками
Краткий обзор способов сортировки
Сортировка по индексам
Эффективность алгоритмов сортировки
Преобразование Шварца
Многоуровневая сортировка на основе преобразования Шварца
Данные с рекурсивной организацией
Построение структур данных с рекурсивной организацией
Отображение данных с рекурсивной организацией
Упражнения
Глава 10. Разработка больших программ
Ликвидация повторяющихся участков программного кода
Вставка программного кода с помощью eval
С помощью оператора do
С помощью директивы require
require и @INC
Конфликт имен
Имена пакетов как разделители пространств имен
Область видимости директивы package
Пакеты и лексические переменные
Упражнения
Глава 11. Введение в объекты
Если бы мы могли говорить на языке зверей…
Вызов метода с помощью оператора "стрелка"
Дополнительный параметр при вызове метода
Вызов второго метода с целью упрощения
Несколько замечаний о массиве @ISA
Перекрытие методов
Поиск унаследованного метода
SUPER способ добиться того же самого
Зачем нужен аргумент @_
Что мы узнали…
Упражнения
Глава 12. Объекты и данные
Лошадь лошади рознь
Вызов метода экземпляра
Доступ к данным экземпляра
Как создать лошадь
Наследование конструктора
Создание метода, работающего как с экземплярами, так и с классами
Добавление параметров к методам
Более сложные экземпляры
Лошадь другого цвета
Что возвращать
Не открывайте черный ящик
Оптимизация методов доступа
Операция чтения и записи в одном методе
Ограничение доступа к методам только по имени класса или только для экземпляров класса
Упражнения
Глава 13. Уничтожение объектов
Уборка мусора
Уничтожение вложенных объектов
Вторичная переработка
Форма косвенного обращения к объектам
Дополнительные переменные экземпляра в подклассах
Переменные класса
Слабые ссылки
Упражнения
Глава 14. Дополнительные сведения об объектах
Методы класса UNIVERSAL
Проверка возможностей объектов
Метод AUTOLOAD как последняя инстанция
Применение AUTOLOAD для реализации методов доступа
Более простой способ создания методов доступа
Множественное наследование
Упражнения
Глава 15. Экспортирование
Что делает директива use
Импорт с помощью модуля Exporter
@EXPORT и @EXPORT_OK
%EXPORT_TAGS
Экспорт имен в объектно-ориентированных модулях
Собственные подпрограммы импорта
Упражнения
Глава 16. Создание дистрибутива
Собрать дистрибутив можно разными способами
Программа h2xs
Файл README
Встроенная документация
Управление дистрибутивом с помощью Makefile.PL
Изменение каталога установки (PREFIX=...)
Тривиальная команда make test
Тривиальная команда make install
Тривиальная команда make dist
Дополнительные каталоги с библиотеками
Упражнения
Глава 17. Основы тестирования
Чем больше тестов, тем лучше программный код
Простейший сценарий с тестами
Искусство тестирования
Тестирующая система
Разработка тестов с помощью Test::More
Тестирование объектно-ориентированных особенностей
Списки To-Do тестов
Пропуск тестов
Более сложные тесты (несколько тестовых сценариев)
Упражнения
Глава 18. Дополнительные сведения о тестировании
Тестирование длинных строк
Тестирование файлов
Тестирование устройств STDOUT и STDERR
Работа с ложными объектами
Тестирование документации в формате POD
Степень покрытия тестами
Разработка собственных модулей Test::*
Упражнения
Глава 19. Передача модулей в CPAN
Всемирная сеть архивов Perl
Первый шаг
Подготовка дистрибутива
Передача дистрибутива на сервер
Объявление о выпуске модуля
Тестирование на нескольких платформах
Подумайте о написании статьи или доклада
Упражнения
Приложение А. Ответы к упражнениям
Алфавитный указатель