Анимация
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

Эта информация может пригодиться при выяснении проблем, возникших с конкретным интерпретатором 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