Анимация
JavaScript
|
Главная Библионтека Эта информация может пригодиться при выяснении проблем, возникших с конкретным интерпретатором Perl. Возможно, с ее помощью вам удастся определить, что ваш интерпретатор бьш некорректно установлен. В конце листинга обратите внимание на строку @INC. В ней перечислены полные пути к каталогам, в которых интерпретатор Peri будет искать свои модули. Таким образом, после установки интерпретатор Perl нельзя просто взять и переместить в другой каталог, поскольку при этом он "потеряет" все свои модули. О том, что такое модули, мы поговорим на 14-м занятии, "Использование модулей". УГЛОВОЙ оператор и однострочные программы На одном из предыдущих занятий мы рассматривали угловой оператор и говорили о том, что он используется для двух целей. 1 щью оператора <> осуществляется ввод данных из файла, дескриптор которого помещен в угловые скобки, например <STDIN>. 2 Если поместить в угловые скобки шаблон, например <*bat>, то в результате будет возвращен список файлов, соответствующих этому щаблону. Напомним, что такая операция называется отбором Файлов. Однако у рассматриваемого нами оператора есть еще одна полезная функция. Если в угловом операторе не указать дескриптор файла (о), то данный оператор будет читать содержимое всех файлов, указанных в командной строке. Если же в командной строке файлы не указаны, то информация будет считываться из стандартного входного потока. Иногда за свою форму угловой оператор без дескриптора файла (о) программисты называют "бубновым оператором". А теперь давайте в качестве примера рассмотрим следующую простую программу: *1/\1Бг/bin/perl -V while(<>) < print S ; > Сохраните программу в файле Exaraple.pl и запустите ее на выполнение с помощью команды С:\> perl le.pl filel file2 file3 В результате угловой оператор будет построчно считывать содержимое сначала filel, затем file2 и наконец file3. Если вы опустите имена файлов, то считывание информации будет происходить из стандартного входного потока. Подобное поведение программы полностью соответствует поведению утилит системы UNIX, таких как sed, awk и др. Аргументы, указанные в командной строке при вызове интерпретатора Perl (те, что расположены после ключей -w, -с, -d и -е), автоматически проходят стадию синтаксического анализа и помещаются в массив ?ARGV. Например, в предыдущем примере элемент SARGV( О ] будет равен "filel", $ARGV[ Ij - "file2" и т.д. Ключ позволяет поместить оператор, указанный после ключа -е, в следующую небольшую программу: LINE: while{<>) { ... f СП;ато,указаньй гос кгсч-е Таким образом, чтобы создать однострочную программу, удаляющую из введенных строк начальные пробелы, можно воспользоваться следующей командой: С:\> perl -n s+ g; print $j filel В результате выполнит такой фрагмент программы: LINE: while(<>] { s/\s+ g; print $ В нашем примере файл filel открывается и его содержимое в цикле while считы-вается построчно в переменную $ . Затем прочитанная строка редактируется с помощью шаблона и выводится на печать. Вместо ключа -п можно использовать ключ -р. Тогда после редактирования с помощью шаблона строка будет автоматически выводиться на печать. Следовательно, предыдущую команду можно переписать так: C:\> perl -p -e s/\s+ g; filel При редактировании файлов с помощью однострочных программ нельзя одновременно открывать один и тот же файл как для чтения, так и для записи, как показано в следующем примере: C:\> perl -р + g; dosfile > dosfile В этом примере производится попытка удалить из строк файла dosfile начальные пробелы. Однако проблема заключается в том, что содержимое файла dosfile будет затерта до того, как программа Peri начнет выполняться. Чтобы редактирование файла выполнялось правильно, необходимо перенаправить выходной поток в другой файл, а затем присвоить ему первоначальное имя, как показано в следующем примере: С:\> perl -р -е dosfile > С:\> rename tempfile dosfile Для некоторых энтузиастов Perl написание коротких однострочных программ является приятным хобби. Идея состоит в том, что чем короче и полезнее программа, тем лучше. Массу примеров подобных однострочных программ можно найти на страницах выходящего раз в квартал The Peri Journal. Резюме На этом занятии речь шла о том, как с помощью отладчика можно быстро и эффективно отладить программу на Perl. Кроме того, б]ла рассмотрена дополнительная возможность углового оператора, с помощью которого можно обработать содержимое всех файлов, указанных в командной строке Perl. В заключение говорилось о том, как с помощью ключей -п и -р выполнять короткие, но полезные однострочные программы на Perl. Вопросы и ответы Я привгк пользоваться отладчиком с графическим интерфейсом. Существует ли подобный отладчик для программ на Perl? Да, причем несколько. В поставку версии для Windows входит совсем неплохой графический отладчик. Что обозначает префикс который выводит отладчик перед именем программы? Отладчик Perl выводит имена в соответствии с принятой концепцией присвоения имен. Некоторые из ее элементов мы будем рассматривать на следующих занятиях, поэтому пока не обращайте на них внимания. Есть ли у интерпретатора Perl какие-либо другие ключи, которые не бгли рассмотренные на этом занятии? Есть, причем несколько. Полный список ключей приведен в электронном спра-вечном руководстве. Чтобы ознакомиться с ним, введите команду perldoc perlrun. Семинар Контрольные вопросы 1. Найдите ошибки в программе, приведенной в листинге 2. Если в командной строке не указаны имена файлов, оператор <> возвращает: а) значение б) строки, поступающие из стандартного входного потока; в) значение true. 3. Отладчик Perl может распечатывать операторы программы перед их выполнением. Такой режим его работы называется трассировкой. Как перевести отладчик в режим трассировки? (Подсказка: для ответа на этот вопрос посмотрите сообщение, которое выводит отладчик в ответ на команду h.): а) команда Т; б) команда t. Ответы 1. Первая ошибка в строке 21. Там ошибочно указан диапазон В операторе диапазона .. не допускается использование обратного счета. Поэтому оператор цикла в строке 21 нужно заменить на такой 0; $ -). Можно также инвертировать список (0. .20} с помощью оператора reverse. Вторая ошибка в строке 17 в операторе 5iness=s/na4eK/5repi/;. При программировании подразумевалось, что необходимо выполнить замену текста в строке, которая содержится в переменной $mess. Но вместо этого был указан оператор присваивания переменной результата подстановки текста в переменной Чтобы исправить ошибку, замените оператор присваивания = на оператор подстановки =". 2. Правильный ответ - вариант б). Если в командной строке не указаны имена файлов, оператор <> выполняет чтение строк текста из стандартного входного потока STDIN. 3 Правильный ответ - вариант б). Режим трассировки активизируется с помощью команды t Команда Т предназначена для выполнения трассировки стека. Трассировка стека позволяет определить последовательность вызовов подпрограмм, т.е. в каком порядке одна подпрограмма вызывала другую. 12-й час. Раб с комодной )окой Perl 199 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 |