Анимация
JavaScript


Главная  Библионтека 

[ 0 ] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242

Подпрограммы

Люди осторожно разглядывали докладчика, скепсис на лицах переходил в заинтересованность, и наоборот.

«Ваш рискованный план обещает выгоду, - заключил председатель. - Но он очень дорог и основан на одних предположениях. Наши математики не подтверждают ваших цифр. Почему мы должны доверить вам свои деньги? Что вы знаете такого, чего не знаем мы?»

«Прежде всего, - ответил он, - я знаю, как вертикально поставить яйцо без внешней опоры. А вы?» С этими словами докладчик залез в сумку и осторожно вынул свежее куриное яйцо. Он передал яйцо финансовым магнатам, которые передавали его из рук в руки, пытаясь справиться с несложной задачей. Все попытки оказались тщетными. Раздавались отчаянные возгласы: «Это невозможно! Никому пе удастся поставить яйцо вертикально!»

Докладчик взял яйцо у рассерженных бизнесменов и поставил яйцо на дубовый стол, прочно удерживая его в руках. После легкого, но уверенного нажатия скорлупа слегка потрескалась. Когда докладчшс убрал руку, яйцо осталось на месте - слегка продавленное, но определе]шо устойчивое. «Что здесь невозможного?» - спросил он.

«Но это же обычный фокус, - закричали бизнесмены. - Такое может сделать любой!»

«Ваша правда, - последовал ответ. - Но это относится ко всему. Пока вы не знаете решения, задача кажется невозможной. А решение выглядит так просто, что вы не понимаете, почему это раньше не приходило вам в голову. Так позвольте мне показать простое решение, чтобы другие могли легко пойти тем же путем. Вы мне доверяете?»

Скептически настроенные капиталисты убедились, что предприниматель действительно на что-то способен, и выделили деньги па его проект. Из маленького андалузского порта отправились в море «Нинья», «Пинта» и «Сайта Мария». Их вел предприниматель с надбитым яйцом и своими идеями - Христофор Колумб.

За ним последовали многие.

Задачи программирования часто похожи на колумбово яйцо. Пока никто не покажет решения, вы сидите и смотрите, как яйцо (то бишь программа) падает снова и снова, ни па шаг не приближаясь к решению. Это особенно справедливо для таких идиоматических языков, как Perl.

Эта книга не задумывалась как полный справочник по Perl, хотя мы опишем некоторые недокументированные аспекты Perl. Любая поставка Perl содержит свыше 1000 страниц электронной документации. Если их не окажется под рукой, обратитесь к системному администратору.

Итак, эта книга - для тех, кто хочет лучше узнать Perl. Перед вами не справочник и не учебник, хотя книга окажется полезным дополнением к ним. Она предназначена для людей, которые изучили основы языка и теперь пытаются связать ингредиенты в готовую программу. На протяжении 20 глав и свыше 300 отдельных тем, именуемых «Рецептами», вы найдете тысячи решений для повседневных задач, с которыми сталкиваются как новички, так и опытные программисты.



Мы постарались сделать так, чтобы книга подходила и для последовательного, п для произвольного доступа. Каждый рецепт вполне самостоятелен, по если вам понадобится дополнительная информация, вы найдете в конце рецепта список ссылок. Глава обычно начинается с простых, повседневных рецептов, а книга начинается с простых глав. Рецепты, посвящен]1ые типам данным и операторам Perl, особенно полезны для новичков. Постепенно мы переГщем к темам и решениям, рассчитанным па более опытных программистов. Но там и сям встречается материал, способ]1ЫЙ вдохновить даже настоящего знатока Perl.

Главы начинаются с краткого обзора. За введением следует основная суть главы, ее рецепты. В духе лозунга Perl - «Всегда существует несколько решений» - во многих рецептах продемонстрированы разные способы решения той же самой или аналогичной задач. Рецепты простираются от конкретных решений в стиле «коротко, но мило» до углубленных миип-учебшнсов. Там, где приведено несколько вариантов, мы часто объясняем преимущества и недостатки каждого подхода.

Предполагается, что к этой книге (как и к обычным поваренным KjnH-ам) читатель обращается более или менее произвольно. Если вы хотите научиться что-то делать, загляните в нужный рецепт. Даже если котнсретное решение не подойдет к вашей задаче, оно но крайней мере даст представление о возможных направлениях поисков.

Каждая глава завершается одной или несколькпми закопче]П1ыми программами. Хотя некоторые рецепты уже содержат маленькие программы, эти приложения выделяют основную тему главы; кроме того, в них, как и в любой реальной программе, используются приемы из других глав. Все эти программы полезны, некоторые из них используются ежедневно. Некоторые программы даже помогли нам в работе над книгой.

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

Первая четверть книги, занимающая более пяти глав, посвящена базовым типам данных Perl. В главе 1 «Строки» рассматриваются такие вопросы, как работа с подстроками, расширение вызовов функций в строках и анализ данных, разделенных запятыми. Глава 2 «Числа» описывает некоторые странности представления с плавающей занятой, разделение разрядов запятыми и процесс генерации псевдослучайных чисел. Глава 3 «Дата и время» демонстрирует преобразования между числовыми и строковыми форматами даты и применение таймеров. В главе 4 «Массивы» рассматривается все, что относится к операциям со списками и массивами, в том числе поиск уникальных элементов, эффективная сортировка и случайные перестановки элементов. Глава 5 «Хэши» завершает основы языка и представляет самый полезный тип даштых - ассоциативные массивы. В ней показано, как обращаться с элементами хэша в порядке вставки, как отсортировать хэш но значению и как хранить несколько ассоциированных значений для одного ключа.

Глава 6 «Поиск но шаблону» занимает больше всего места. Рецепты описывают преобразование универсальных символов командного интерпретатора в шаблон, поиск букв и слов, многострочные совпадения, отказ от максимализма при поиске и поиск строк, которые близки к искомым, но не совпадают с ними. Хотя



глава и так получилась самой длннпо11, она могла бы стать еще длиннее - в каждой главе вы найдете примеры использования регулярных выражений. Это часть того, что придает Perl его неповторимость.

Три следующие главы относятся к файловой системе. В главе 7 «Доступ к файлам» показано, как открыть файл, заблокировать его для параллельной работы, модифицировать его на месте и сохранить файловый манипулятор в переменной. В главе 8 «Содержимое файлов» обсуждается проблема поиска ко1ща увеличивающегося файла, чтение конкретной строки файла и двоичный ввод/вывод с произвольным доступом. Наконец, в главе 9 «Каталоги» описаны приемы копирова-1шя, перемещения и удаления файлов, изменетш атрибутов времени файла и рекурсивной обработки всех файлов каталога.

Основное внимание в главах 10-13 уделено тому, как сделать программы более гибкими и функциональными. Глава 10 «Подпрограммы» содержит рецепты для создания устойчивых локальных переменных, передачи параметров по ссылке, косвенного вызова фупкщи"! н обработки исключений. Глава 11 «Ссылки и записи» посвящена структурам данных; продемонстрированы основные операции со ссылками на данные и функции. Также в пей показано, как создавать аналоги конструкции struct языка С, как сохранять и загружать их из устойчивого хранилища. В главе 12 «Пакеты библиотеки и модули», рассматривается деление программы на отдельные фа11лы; создание переменных и фу}н<:ций, действующих только в границах данного модуля; замена встроенных функций, перехват обра-щени11 к отсутствующим модулям и использование утилит h2ph и /z2.rs для использования кода, написаииого па С и C-i-i-. Наконец, в главе 13 «Классы, объекты и связи» рассматриваются основные принципы построения объектно-орие]1тиро-ва}Н1Ых модулей для создания пользовательских типов, обладаюппх конструкторами, деструкторами и возможностями наследования. В других рецептах показаны примеры использования циклических структур данных, перегрузки операторов и связанных TimoB данных.

Две следующие главы посвящены интерфейсам: первая - интерфейсам к базам данных, вторая - к визуальным устроГютвам. В главе 14 «Базы данных» описана методика работы с и]1дексирова}Н1ымн текстовыми файлалт, блокировка файлов DBM и хранение в них информации, а также продемонстрирован интерфейс Perl к базам данных SQL. В главе 15 «Пользовательские интерфейсы» рассматриваются такие темы, как очистка экрана, обработка пара.метров командно!! строки, посимвольный ввод, перемещение курсора средствами tenncap и curses и независимое от платформы графическое программирование с примененнем Tk.

Последняя четверть книги посвящена взаимодействию с другими профаммами и устройствами. В главе 16 «Управление процессами и межпроцессные взаимодействия» говорится о запуске других программ и получении их вывода, об уничтожении процессов-зомби, именованных каналах, обработке сигналов и совместному использованию переменных работающими процессами. Глава 17 «Сокеты» показывает, как установить потоковое соединение или использовать датаграммы при разработке низкоуровневых сетевых приложещй «клиент/сервер». В главе 18 «Протоколы Интернета» рассматриваются протоколы высокого уровня - ша11, FTP, Usenet и Telnet. Глава 19 «Программирование CGb содержит рецепты для обработки Web-форм, перехвата ощибок, повышения безопасности за счет отказа



[ 0 ] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242