Предисловие

Введение

О чем рассказано в этой книге

Что нового в этом издании

Платформы

Условные обозначения, использованные в книге

Благодарности для первого издания

Благодарности для второго издания

От издательства

Глава 1. Строки

1.0. Введение

1.1. Работа с подстроками

1.2. Выбор значения по умолчанию

1.3. Перестановка значений без использования временных переменных

1.4. Преобразование между символами и ASCII-кодами

1.5. Использование именованных символов Юникода

1.6. Посимвольная обработка строк

1.7. Обратная перестановка слов или символов

1.8. Интерпретация комбинированных символов Юникода как одиночных символов

1.9. Приведение строк с комбинированными символами Юникода к каноническому виду

1.10. Интерпретация строки Юникода как последовательности октетов

1.11. Расширение и сжатие символов табуляции

1.12. Расширение переменных во входных данных

1.13. Преобразование регистра

1.14. Расстановка прописных букв в заголовках

1. 15. Интерполяция функций и выражений в строках

1.16. Отступы во встроенных документах

1. 17. Переформатирование абзацев

1. 18. Экранирование символов

1. 19. Удаление пропусков в обоих концах строки

1.20. Анализ данных, разделенных запятыми

1.21. Константы

1.22. Сравнение слов с похожим звучанием

1.23. Программа: fixstyle

1.24. Программа: psgrep

Глава 2. Числа

2.0. Введение

2.1. Проверка строк на соответствие числам

2.2. Округление чисел с плавающей запятой

2.3. Сравнение вещественных чисел

2.4. Действия с последовательностями целых чисел

2.5. Работа с числами в римской записи

2.6. Генератор случайных чисел

2.7. Получение повторяющихся серий случайных чисел

2.8. Повышение фактора случайности

2.9. Получение случайных чисел с неравномерным распределением

2.10. Выполнение тригонометрических вычислений в градусах

2.11. Тригонометрические функции

2.12. Вычисление логарифмов

2.13. Умножение матриц

2.14. Операции с комплексными числами

2.15. Преобразования двоичных, восьмеричных и шестнадцатеричных чисел

2.16. Вывод запятых в числах

2. 17. Правильный вывод во множественном числе

2. 18. Программа: разложение на простые множители

Глава 3. Время и дата

3.0. Введение

3.1. Определение текущей даты

3.2. Преобразование полного времени в секунды с начала эпохи

3.3. Преобразование секунд с начала эпохи в полное время

3.4. Операции сложения и вычитания для дат

3.5. Вычисление разности между датами

3.6. Определение номера недели или дня недели/месяца/года

3.7. Анализ даты и времени в строках

3.8. Вывод даты

3.9. Таймеры высокого разрешения

3.10. Короткие задержки

3.11. Программа: hopdelta

Глава 4. Массивы

4.0. Введение

4.1. Определение списка в программе

4.2. Вывод списков с запятыми

4.3. Изменение размера массива

4.4. Реализация разреженного массива

4.5. Выполнение операции с каждым элементом списка

4.6. Перебор массива по ссылке

4.7. Выборка уникальных элементов из списка

4.8. Поиск элементов одного массива, отсутствующих в другом массиве

4.9. Вычисление объединения, пересечения и разности уникальных списков

4.10. Присоединение массива

4.11. Обращение массива

4.12. Обработка нескольких элементов массива

4.13. Поиск первого элемента списка, удовлетворяющего некоторому критерию

4.14. Поиск всех элементов массива, удовлетворяющих определенному критерию

4. 15. Числовая сортировка массива

4. 16. Сортировка списка по вычисляемому полю

4.17. Реализация циклических списков

4.18. Случайная перестановка элементов массива

4.19. Программа: words

4.20. Программа: permute

Глава 5. Хэши

5.0. Введение

5.1. Занесение элемента в хэш

5.2. Проверка наличия ключа в хэше

5.3. Создание хэша с неизменяемыми ключами или значениями

5.4. Удаление из хэша

5.5. Перебор хэша

5.6. Вывод содержимого хэша

5.7. Перебор элементов хэша в порядке вставки

5.8. Хэши с несколькими ассоциированными значениями

5.9. Инвертирование хэша

5.10. Сортировка хэша

5.11. Объединение хэшей

5.12. Поиск общих или различающихся ключей в двух хэшах

5.13. Хэширование ссылок

5.14. Предварительное выделение памяти для хэша

5.15. Поиск самых распространенных значений

5.16. Представление отношений между данными

5.17. Программа: dutree

Глава 6. Поиск по шаблону

6.0. Введение

6.1. Копирование с подстановкой

6.2. Идентификация алфавитных символов

6.3. Поиск слов

6.4. Комментирование регулярных выражений

6.5. Поиск N-го совпадения

6.6. Межстрочный поиск

6.7. Чтение записей с разделением по шаблону

6.8. Извлечение строк из определенного интервала

6.9. Работа с метасимволами командных интерпретаторов

6.10. Ускорение интерполированного поиска

6.11. Проверка правильности шаблона

6.12. Локальный контекст в регулярных выражениях

6.13. Неформальный поиск

6.14. Поиск от последнего совпадения

6.15. Максимальный и минимальный поиск

6.16. Поиск повторяющихся слов

6.17. Поиск вложенных конструкций

6.18. Логические операции AND, OR и NOT в одном шаблоне

6.19. Проверка адресов электронной почты

6.20. Поиск сокращений

6.21. Программа: urlify

6.22. Программа: tcgrep

6.23. Копилка регулярных выражений

Глава 7. Доступ к файлам

7.0. Введение

7.1. Открытие файла

7.2. Открытие файлов с нестандартными именами

7.3. Тильды в именах файлов

7.4. Имена файлов в сообщениях об ошибках

7.5. Сохранение файловых манипуляторов в переменных

7.6. Написание процедуры, получающей файловые манипуляторы

7.7. Кэширование открытых манипуляторов вывода

7.8. Одновременный вывод по нескольким манипуляторам

7.9. Открытие и закрытие файловых дескрипторов

7.10. Копирование файловых манипуляторов

7.11. Создание временных файлов

7.12. Хранение данных в тексте программы

7.13. Сохранение нескольких файлов в области DATA

7.14. Создание фильтра

7.15. Непосредственная модификация файла с применением временной копии

7.16. Непосредственная модификация файла с помощью параметра –i

7.17. Непосредственная модификация файла без применения временного файла

7.18. Блокировка файла

7.19. Очистка буфера

7.20. Асинхронный ввод/вывод

7.21. Определение количества читаемых байтов

7.22. Асинхронное чтение из нескольких манипуляторов

7.23. Асинхронное чтение полной строки

7.24. Программа: netlock

7.25. Программа: lockarea

Глава 8. Содержимое файлов

8.0. Введение

8.1. Чтение строк с символами продолжения

8.2. Подсчет строк (абзацев, записей) в файле

8.3. Обработка каждого слова в файле

8.4. Чтение файла по строкам или абзацам в обратном направлении

8.5. Чтение из дополняемого файла

8.6. Выбор случайной строки из файла

8.7. Случайная перестановка строк

8.8. Чтение строки с конкретным номером

8.9. Обработка текстовых полей переменной длины

8.10. Удаление последней строки файла

8.11. Обработка двоичных файлов

8.12. Ввод/вывод с произвольным доступом

8.13. Обновление файла с произвольным доступом

8.14. Чтение строки из двоичного файла

8.15. Чтение записей фиксированной длины

8.16. Чтение конфигурационных файлов

8.17. Проверка достоверности файла

8.18. Интерпретация файла как массива

8.19. Назначение уровней ввода/вывода

8.20. Чтение и запись Юникода через файловый манипулятор

8.21. Преобразование текстовых файлов Microsoft в Юникод

8.22. Сравнение содержимого двух файлов

8.23. Интерпретация строки как файла

8.24. Программа: tailwtmp

8.25. Программа: tctee

8.26. Программа: laston

8.27. Программа: индексация файла


Глава 9. Каталоги

9.0. Введение

9.1. Получение и установка атрибутов времени

9.2. Удаление файла

9.3. Копирование или перемещение файла

9.4. Распознавание двух имен одного файла

9.5. Обработка всех файлов каталога

9.6. Получение списка файлов по шаблону

9.7. Рекурсивная обработка всех файлов каталога

9.8. Удаление каталога вместе с содержимым

9.9. Переименование файлов

9.10. Деление имени файла на компоненты

9.11. Работа с разрешениями доступа к файлам в символьном представлении

9.12. Программа: symirror

9.13. Программа: lst


Глава 10. Процедуры

10.0. Введение

10.1. Доступ к аргументам процедуры

10.2. Создание закрытых переменных в функциях

10.3. Создание устойчивых закрытых переменных

10.4. Определение имени текущей функции

10.5. Передача массивов и хэшей по ссылке

10.6. Определение контекста вызова

10.7. Передача именованных параметров

10.8. Пропуск некоторых возвращаемых значений

10.9. Возврат нескольких массивов или хэшей

10.10. Возвращение признака неудачного вызова

10.11. Прототипы функций

10.12. Обработка исключений

10.13. Сохранение глобальных значений

10.14. Переопределение функции

10.15. Перехват вызовов неопределенных функций с помощью AUTOLOAD

10.16. Вложенные процедуры

10.17. Имитация команды switch

10.18. Сортировка почты

Глава 11. Ссылки и записи

11.0. Введение

11.1. Ссылки на массивы

11.2. Создание хэшей массивов

11.3. Получение ссылок на хэши

11.4. Получение ссылок на функции

11.5. Получение ссылок на скаляры

11.6. Создание массивов ссылок на скаляры

11.7. Применение замыканий вместо объектов

11.8. Создание ссылок на методы

11.9. Конструирование записей

11.10. Чтение и сохранение записей в текстовых файлах

11.11. Вывод структур данных

11.12. Копирование структуры данных

11.13. Сохранение структур данных на диске

11.14. Устойчивые структуры данных

11.15. Циклические структуры данных и слабые ссылки

11.16. Программа: Outlines

11.17. Программа: бинарные деревья

Глава 12. Пакеты, библиотеки и модули

12.0. Введение

12.1. Определение интерфейса модуля

12.2. Обработка ошибок require и use

12.3. Отложенное использование модуля

12.4. Ограничение доступа к переменным модуля

12.5. Ограничение доступа к функциям модуля

12.6. Определение пакета вызывающей стороны

12.7. Автоматизированное выполнение завершающего кода

12.8. Ведение собственного каталога модулей

12.9. Подготовка модуля к распространению

12.10. Ускорение загрузки модуля с помощью SelfLoader

12.11. Ускорение загрузки модуля с помощью AutoLoader

12.12. Переопределение встроенных функций

12.13. Переопределение встроенной функции во всех пакетах

12.14. Вывод сообщений об ошибках и предупреждений по аналогии со встроенными функциями

12.15. Настройка предупреждений

12.16. Косвенные ссылки на пакеты

12.17. Применение h2ph для преобразования заголовочных файлов C

12.18. Применение h2xs для создания модулей с кодом C

12.19. Написание расширений на C с использованием Inline::C

12.20. Документирование модуля в формате pod

12.21. Построение и установка модуля CPAN

12.22. Пример: шаблон модуля

12.23. Программа: поиск версий и описаний установленных модулей

Глава 13. Классы, объекты и связи

13.0. Введение

13.1. Конструирование объекта

13.2. Уничтожение объекта

13.3. Работа с данными экземпляра

13.4. Управление данными класса

13.5. Использование класса как структуры

13.6. Клонирование объектов

13.7. Копирующие конструкторы

13.8. Косвенный вызов методов

13.9. Определение принадлежности субкласса

13.10. Создание класса с поддержкой наследования

13.11. Вызов переопределенных методов

13.12. Генерация методов доступа с помощью AUTOLOAD

13.13. Использование циклических структур данных

13.14. Перегрузка операторов

13.15. Создание “магических” переменных функцией tie

Глава 14. Базы данных

14.0. Введение

14.1. Создание и использование DBM-файла

14.2. Очистка DBM-файла

14.3. Преобразование DBM-файлов

14.4. Объединение DBM-файлов

14.5. Сортировка больших DBM-файлов

14.6. Хранение сложных структур данных в DBM-файлах

14.7. Устойчивые данные

14.8. Сохранение результатов запроса в Excel или в CSV

14.9. Выполнение команд SQL с помощью DBI

14.10. Экранирование строк

14.11. Обработка ошибок при операциях с базами данных

14.12. Эффективное повторение запросов

14.13. Программное построение запросов

14.14. Определение количества записей, возвращаемых запросом

14.15. Использование транзакций

14.16. Постраничный просмотр данных

14.17. Запросы к файлам CSV с использованием SQL

14.18. Работа с SQL без сервера БД

14.19. Программа: ggh — поиск в глобальном журнале Netscape

Глава 15. Интерактивность

15.0. Введение

15.1. Лексический разбор аргументов

15.2. Проверка интерактивного режима

15.3. Очистка экрана

15.4. Определение размера терминала или окна

15.5. Изменение цвета текста

15.6. Чтение символа с клавиатуры

15.7. Предупреждающие сигналы

15.8. Использование termios

15.9. Проверка наличия входных данных

15.10. Ввод пароля

15.11. Редактирование входных данных

15.12. Управление экраном

15.13. Управление другой программой с помощью Expect

15.14. Создание меню с помощью Tk

15.15. Создание диалоговых окон с помощью Tk

15.16. Обработка событий масштабирования в Tk

15.17. Удаление окна сеанса DOS в Perl/Tk для Windows

15.18. Построение диаграмм

15.19. Создание миниатюр

15.20. Включение текста в изображение

15.21. Программа: tcapdemo

15.22. Программа: tkshufflepod

15.23. Программа: graphbox

Глава 16. Управление процессами и межпроцессные взаимодействия

16.0. Введение

16.1. Получение вывода от программы

16.2. Запуск другой программы

16.3. Замена текущей программы

16.4. Получение или передача данных другой программе

16.5. Фильтрация выходных данных

16.6. Предварительная обработка ввода

16.7. Чтение содержимого STDERR

16.8. Управление потоками ввода и вывода другой программы

16.9. Управление потоками ввода, вывода и ошибок другой программы

16.10. Взаимодействие между родственными процессами

16.11. Имитация файла на базе именованного канала

16.12. Совместное использование переменных в разных процессах

16.13. Получение списка сигналов

16.14. Посылка сигнала

16.15. Установка обработчика сигнала

16.16. Временное переопределение обработчика сигнала

16.17. Написание обработчика сигнала

16.18. Перехват Ctrl+C

16.19. Уничтожение процессов-зомби

16.20. Блокировка сигналов

16.21. Тайм-аут

16.22. Преобразование сигналов в фатальные ошибки

16.23. Программа: sigrand

Глава 17. Сокеты

17.0. Введение

17.1. Написание клиента TCP

17.2. Написание сервера TCP

17.3. Передача данных через TCP

17.4. Создание клиента UDP

17.5. Создание сервера UDP

17.6. Использование сокетов UNIX

17.7. Идентификация другого конца сокета

17.8. Определение вашего имени и адреса

17.9. Закрытие сокета после разветвления

17.10. Написание двусторонних клиентов

17.11. Разветвляющие серверы

17.12. Серверы с предварительным ветвлением

17.13. Серверы без ветвления

17.14. Многопоточный сервер

17.15. Написание многопоточного сервера с использованием POE

17.16. Написание многоканального сервера

17.17. Создание сервера-демона

17.18. Перезапуск сервера по требованию

17.19. Управление несколькими потоками ввода

17.20. Программа: backsniff

17.21. Программа: fwdport

Глава 18. Протоколы Интернета

18.0. Введение

18.1. Простой поиск в DNS

18.2. Клиентские операции FTP

18.3. Отправка почты

18.4. Чтение и отправка новостей Usenet

18.5. Чтение почты на серверах POP3

18.6. Программная имитация сеанса telnet

18.7. Проверка удаленного компьютера

18.8. Обращение к серверу LDAP

18.9. Отправка вложений по электронной почте

18.10. Извлечение вложений из сообщений

18.11. Написание сервера XML-RPC

18.12. Написание клиента XML-RPC

18.13. Написание сервера SOAP

18.14. Написание клиента SOAP

18.15. Программа: rfrm

18.16. Программы: expn и vrfy

Глава 19. Программирование CGI

19.0. Введение

19.1. Написание сценария CGI

19.2. Перенаправление сообщений об ошибках

19.3. Исправление ошибки 500 Server Error

19.4. Написание безопасных программ CGI

19.5. Выполнение команд без обращений к командному интерпретатору

19.6. Форматирование списков и таблиц средствами HTML

19.7. Перенаправление клиентского браузера

19.8. Отладка на уровне HTTP

19.9. Работа с cookie

19.10. Создание устойчивых элементов

19.11. Создание многостраничного сценария CGI

19.12. Сохранение формы в файле или канале

19.13. Программа: chemiserie

Глава 20. Автоматизация в Веб

20.0. Введение

20.1. Обращение по URL из сценария Perl

20.2. Автоматизация отправки формы

20.3. Извлечение URL

20.4. Преобразование ASCII в HTML

20.5. Преобразование HTML в ASCII

20.6. Удаление тегов HTML

20.7. Поиск устаревших ссылок

20.8. Поиск недавно обновлявшихся ссылок

20.9. Создание шаблонов HTML

20.10. Зеркальное копирование Веб-страниц

20.11. Создание робота

20.12. Анализ файла журнала Веб-сервера

20.13. Обработка серверных журналов

20.14. Работа с cookie

20.15. Загрузка страниц, защищенных паролем

20.16. Загрузка веб-страниц https://

20.17. Продолжение загрузки по команде HTTP GET

20.18. Разбор кода HTML

20.19. Извлечение табличных данных

20.20. Программа: htmlsub

20.21. Программа: hrefsub

Глава 21. mod_perl

21.0. Введение

21.1. Аутентификация

21.2. Установка cookie

21.3. Получение значений cookie

21.4. Перенаправление браузера

21.5. Чтение информации из заголовков

21.6. Работа с параметрами форм

21.7. Получение отправленных файлов

21.8. Ускорение операций с базой данных

21.9. Настройка ведения журналов Apache

21.10. Прозрачное хранение данных в URL

21.11. Взаимодействие между mod_perl и PHP

21.12. Переход с CGI на mod_perl

21.13. Передача информации между обработчиками

21.14. Повторная загрузка измененных модулей

21.15. Хронометраж приложений mod_perl

21.16. Построение шаблонов с использованием HTML::Mason

21.17. Построение шаблонов с использованием Template Toolkit

Глава 22. XML

22.0. Введение

22.1. Разбор XML в структуры данных

22.2. Разбор кода XML в деревья DOM

22.3. Разбор кода XML в события SAX

22.4. Простые изменения в элементах и тексте

22.5. Проверка действительности XML

22.6. Поиск элементов и текста в документе XML

22.7. Обработка преобразований таблиц стилей XML

22.8. Обработка больших файлов

22.9. Чтение и запись файлов RSS

22.10. Построение кода XML