Предисловие
Введение
О чем рассказано в этой книге
Что нового в этом издании
Платформы
Условные обозначения, использованные в книге
Благодарности для первого издания
Благодарности для второго издания
От издательства
Глава 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