Поиск

Куда двигаться дальше

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

Вы не найдете единственный ресурс или источник информации, содержащий все сведения о Perl.Но в следующих разделах содержатся рекомендации о том, какие шаги следует сделать.

Ресурсы, о которых здесь говорится, представлены примерно в том порядке, в котором их следует разыскивать. Разумеется, и из этого правила есть исключения, но в основном следование указанному порядку поможет вам решить все проблемы настолько быстро, насколько это возможно.

Ваш первый шаг

Если у вас возникла какая-то проблема с Perl, попытайтесь выяснить, какую первую вещь вам трудно сделать. Вы разочарованы и если уже поработали над задачей некоторое время, вероятно, расстроены. Глубоко вздохните, не паникуйте и скажите себе, что все будет хорошо. Хотите верьте, хотите — нет, но это очень важный первый шаг. Большинство людей через некоторое время зацикливаются на задаче и, будучи разочарованы, не могут ясно мыслить. В результате все заканчивается тем, что положение дел только ухудшается.

Прогуляйтесь, выпейте пива, успокойтесь и расслабьтесь. Вы непременно решите эту проблему.

Ваш самый полезный инструмент

Самый полезный инструмент в вашем наборе инструментов Perl — это сам Perl.Прежде всего вам нужно определить, с какого рода проблемой вы имеете дело. Как правило, все проблемы делятся на две категории: синтаксические или логические ошибки.

Если проблема заключается в синтаксисе, то обычно ее, в свою очередь, можно отнести к двум категориям: либо вы что-то сделали неправильно, либо это просто опечатка. Запустите программу и внимательно изучите сообщение об ошибке; обычно Perl правильно определяет, в какой строке что-то не так. А теперь исследуйте эту строки, находя ответы на следующие вопросы.

  • В выданном Perl сообщении об ошибке указывается конкретно, где именно ее следует искать? Если да, то ищите ее там! Интерпретатор Perl— ваш самый надежный помощник в деле нахождения ошибок.
  • Проверьте, у всех ли скобок (круглых, квадратных и фигурных) есть пары?
  • Тщательно ли вы проверили синтаксис операторов? Проверьте его еще раз. Вы будете удивлены, выяснив, как много ошибок на поверку оказываются синтаксическими.
  • Может, вы что-то пропустили? Например, точку или запятую?
  • Все ли в порядке со строками, находящимися непосредственно перед указанной строкой?
  • Если вы вернетесь к разделу данной книги, где говорится об определенном правиле синтаксиса, то сможете ли найти примеры, аналогичные вашему?
  • Если вы откуда-то скопировали код, то можете ли поискать этот же фрагмент в другом месте? Возможно, в скопированном коде содержалась ошибка. От них, в конце концов, никто не застрахован.

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

  1. Убедитесь в том, что в строке #! вашей программы содержится ключ -w.
  2. Убедитесь, что где-то в начале программы есть оператор use strict.

Часто оказывается, что многие проблемы, которые внешне кажутся связанными с логикой, — это простые ошибки, легко обнаруживаемые с помощью ключа -w и директивы use strict. Воспользуйтесь этими средствами, и, если проблемы останутся, продолжайте читать дальше.

Отладка программы

Если вы уверены, что синтаксис программы правильный, но просто она дает неверные результаты, то самое время выполнить элементарную отладку.

Первый и, вероятно, самый распространенный метод отладки программы — это использование скромного и непритязательного оператора print. Если им правильно воспользоваться, он может дать некоторую диагностику программы во время ее выполнения, т.е. выдать сообщения о том, что происходит. Посмотрите, как оператор print работает в следующем примере:

Но помните, что после завершения работы над программой вы должны убрать из нее все отладочные операторы print. Чтобы впоследствии вам легче было их все разыскать, я рекомендую ввести в них какое-то отличительное ключевое слово, например DEBUG или ОТЛАДКА. Кроме того, направляя вывод в стандартный поток ошибок STDERR, вы сможете отделить обычные выходные данные от диагностики. Если вы включили в диагностические сообщения литералы _LIKE_ и _FILE_, то Perl напечатает имя текущей строки и файла.

Другой подход, который стоит опробовать, — это отладчик Perl.Этот отладчик можно использовать практически для любой программы, написанной на Perl. Наблюдение за пошаговым выполнением программы может быть очень информативным. Инструкции по использованию отладчика Perl даны на 12-м занятии, "Работа с командной строкой Perl".

Во-первых, помогите себе сами

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

Как указывалось на 1-м занятии , "Начало работы с Perl", в каждую поставку Perl входит полный набор документации. В поставку выпуска 5.6 включено свыше 1700 страниц документации. В ней описывается каждый модуль и каждая функция языка Perl, т.е. освещаются практически все аспекты; здесь же вы найдете большой список часто задаваемых вопросов (Frequently Asked Questions — FAQ).

Чтобы получить список имеющейся документации, наберите после приглашения команду perldocperl. В ответ будут перечислены все разделы руководства, а также дано общее описание Perl.

В разделе FAQ содержится список вопросов о языке Perl, наиболее часто задаваемых начинающими программистами и профессионалами. Стоит просмотреть данный список хотя бы один раз, чтобы получить представление о том, какого рода вопросы здесь содержатся, даже если вы пока не совсем понимаете смысл ответов.

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

Если вы не можете получить доступ к электронной документации, то сможете найти ее также на Web-сервере по адресу http://www.perl.com.

Учитесь на ошибках других

Usenet — это система пересылки сообщений, которая была разработана в начале 80-х годов и постепенно распространилась по Internet, которая еще только набирала силу. Usenet — это десятки тысяч дискуссионных групп, посвященных самым разным темам, начиная от медитации, садоводства, компьютеров и научной фантастики и заканчивая хоккеем и роликами. Наряду с этим существуют также местные группы новостей для каждого региона в мире. А вот список групп новостей, посвященных Perl.

Для того чтобы получать новости Usenet, вам нужна специальная программа чтения новостей. Такую программу найти несложно. Можно зайти на любой сервер, откуда загружают программное обеспечение, и взять программу чтения новостей. Можно зайти также на некоторые Web-серверы (например, deja.com или super news. com), которые являются зеркальными отражениями групп новостей Usenet в формате Web; здесь для чтения новостей вам потребуется только Web-броузер.

В этих группах новостей люди задают вопросы о проблемах, которые у них возникли с Perl, а другие люди отвечают на эти вопросы — причем все это делается на добровольной основе. Кроме того, здесь проводятся обсуждения тем, касающихся Perl, которые имеют всеобщий интерес.

Однажды я сделал наблюдение, правильность которого неоднократно подтверждалась на протяжении всей моей карьеры программиста: "В программировании нет новых проблем". Можете быть совершенно уверенны в том, что с любой возникшей у вас проблемой кто-то уже сталкивался. Весь фокус в том, чтобы найти задававшего этот вопрос и узнать, какой ответ он получил. Весьма вероятно, что по крайней мере один человек задавал вопрос, очень похожий на ваш, в одной из этих групп новостей.

На сервере deja.com ведется история большей части Usenet. Если вы воспользуетесь поисковой системой этого сервера, введя несколько точно подобранных ключевых слов, то, скорее всего, найдете ответы на свой вопрос.

Рассмотрим такой пример. Предположим, вам нужно узнать, как написать программу на Perl, чтобы "вытащить" Web-страницу. Перейдите к странице Power Screen сервера deja.com и заполните пустые поля в этом окне следующей информацией:

Для данного примера все остальные поля оставьте пустыми. Когда будут выданы результаты поиска — примерно 100 вариантов соответствий, — то большинство из них будут относиться к теме, о которой вы спрашивали. По поводу статей, которые вы будете читать в Usenet, нужно иметь в виду следующее.

  • Не все ответы правильны. Любой может задать вопрос и любой может на него ответить. Прочтите несколько ответов и решите для себя, какие из них заслуживают доверия. При этом польза, которую вы извлечете, может быть разной.
  • Если вы не уверены в правильности ответа, используйте его в качестве отправной точки и проверьте предоставленную информацию самостоятельно. Теперь, когда вы знаете, где искать, прочитайте соответствующие страницы руководства, посвященные данной теме.
  • На сервере deja.com сохраняется архив новостей за последние пять лет. Ответы, которые были правильны пять лет назад, теперь могут быть опротестованы.
Когда все остальное не удалось, спрашивайте

Если вы просмотрели электронную документацию, книги, архивы Usenet и так и не нашли ответа на свой вопрос, то нужно кого-то спросить.

Просьба о помощи — это последнее средство, но никак не первое. Уникальным способом получения ответов на вопросы является обращение к специалистам. Только они в ответ на плохо сформулированный вопрос могут иногда выдавать гениальные решения проблем. Но, в отличие от всех остальных ресурсов, о которых я упоминал, возможности людей отвечать на вопросы являются ограниченными. Они устают, возможно, у них выдался тяжелый день, но особенно они могут уставать оттого, что им приходится снова и снова отвечать на одни и те же вопросы.

И хотя вполне вероятно, что человек, которого вы спрашиваете, знает ответ, помните, что вы отнимаете у него время и заимствуете его опыт. Поэтому, прежде чем беспокоить кого-то своими вопросами, вы обязаны серьезно потрудиться и провести самостоятельный поиск.

Чтобы задать вопрос в Usenet, воспользуйтесь программой чтения новостей или одним из упомянутых выше Web-интерфейсов. Формулируя вопрос, придерживайтесь следующих правил.

  1. Прежде чем что-либо сделать, выясните, есть ли у группы новостей список часто задаваемых вопросов. У групп новостей, посвященных Perl, такой список есть. Кроме того, он входит в поставку интерпретатора Perl. Если же вас интересует любая другая группа новостей, поищите FA.Q этой группы на сервере deja.com, прежде чем посылать в группу свое сообщение.
  2. Задавайте вопрос там, где нужно, т.е. в соответствующей группе новостей. Общий вопрос о языке Perl нужно задавать в группе comp.lang.perl.misc. A вопрос по программированию, касающийся CGI, видимо, следует задавать в comp.infosystems.www.authoring.cgi. Прочитав FAQ группы, вы поймете, в нужном ли месте задаете вопрос.
  3. Выберите для своего сообщения хорошее название темы в строке Subject. Оно должно точно описывать проблему. Старайтесь избегать лишних слов (типа "помогите" или "вопрос новичка"); пусть название темы будет содержательным, но лаконичным.
  4. В теле сообщения обязательно должно содержаться следующее:
    а) описание того, что вы пытаетесь сделать (и, возможно, даже описание
    того, зачем это нужно);
    б) описание того, что вы пытались делать до сих пор и что получили в итоге;
    в) описание ошибок, с которыми вы столкнулись.

    Если вы публикуете в группе новостей сообщения об ошибках или ссылки на свою программу, обязательно включите достаточный фрагмент кода, чтобы ваши респонденты могли понять, что происходит. Если вы пытаетесь обработать данные, поместите несколько строк для примера.

    В теле сообщения не должно содержаться следующее:
    а) большие фрагменты кода;
    б) двоичные файлы, такие как ЕХЕ-файлы, закодированные утилитой uuencode;
    в) вложения ММЕ Вместо этого включите в тело сообщения свои примеры и код.

  5. Правильно указывайте адрес электронной почты — на случай, если кто-либо захочет ответить вам, но не публично, а конфиденциально.
  6. И, самое главное, будьте вежливы. Вы просите об одолжении незнакомых людей. Причем никто не обязан помогать вам. Говорите "спасибо" и "пожалуйста" и избегайте замечаний, которые могут вызвать чье-то недовольство или возмущение. Пытаясь получить помощь, не пользуйтесь хитростями и уловками. Например, не пишите "Помогите бедной девочке с ее CGI-программой..." или "Я предоставлю вам бесплатную Web-страницу, если вы...". Подобные уловки примитивны и унизительны.

Если вы опубликовали свое сообщение в группе новостей, спокойно ждите ответа. Пройдет несколько дней, прежде чем новости Usenet распространятся по всему миру. Кроме того, люди не всегда следят за новостями и читают каждое сообщение. Будьте терпеливы и, пока ожидаете, займитесь другой задачей. И, чтобы вы ни делали, не посылайте снова в Usenet свой вопрос слишком быстро. Подождите хотя бы пару недель, прежде чем снова задать свой вопрос. Причем сначала перефразируйте его, проверьте, четко ли сформулирована тема в строке Subject, а затем сделайте еще одну попытку получить ответ.

Ответы на ваш запрос могут начать поступать немедленно (в течение нескольких минут) либо появятся спустя месяц или более со дня опубликования. Как я уже говорил, качество ответов будет меняться в широком диапазоне. Одни ответы будут информативными, в то время как другие могут оказаться просто неправильными. Одни респонденты будут благожелательными и вежливыми, а другие — ужасно грубыми. По правилам этикета Сети следует поблагодарить всех ответивших и проигнорировать любые неприятные, оскорбительные или возмущенные письма, которые вы получили.