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

Почему функции "*.*") возвращает не вс йлы, находящиеся в каталоге?

Потому что шаблон *.* соответствует только тем файлам, в имени которых содержится точка. Чтобы получить список всех файлов каталога, используйте конструкцию glob("*"). Функция glob и ее шаблоны реализованы в Perl так, чтобы обеспечить переносимость программ между разными компьютерными платформами. Поэтому шаблон не соответствует его аналогу в MS-DOS.

Для выполнения поиска файлов во вложенных каталогах в программу пудгер б1ла добавлена функция opendir и несколько модифицирован основной цикл. Однако в программе появились какие-то ошибки.

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

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

Почему программа, описанная в листинге 10.3, вьщаег сообщение об опшбке при попытке переименования файлов *.bat в *,tmp?

Дело в том, что в качестве шаблона для поиска файлов нельзя использовать конструкцию *.bat, поскольку она не является корректным регулярным выражением. Звездочка должна обязательно следовать после какого-нибудь символа шаблона, ведь она

обозначает факт повтора предыдущего символа. Если же ввести конструкцию \*\.bat,

сообщение об ошибке исчезнет, но программа все равно работать не будет, поскольку

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

Для решения проблемы либо введите корректный шаблон, либо измените строку19 программы следующим образом:

s/\Q$oldpat/$newpat/;

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

Семинар

Контрольные вопросы

1. Какой оператор используется для вывода времени последнего изменения файла foofile?

а) print glob("foofile");

б) print

в) print scalar Itirae (stat{"foofile"))[9].

2. Что возвращает функция unlink?

а) число удаленных файлов;

б) истинное или ложное значение в зависимости от результата выполнения;

в) число файлов, которые должны были быть удалены.



Ответы

Правильный ответ - вариант б) или в). В первом случае время модификации файла будет выведено в секундах, прошедших с 0 часов 1 января 1970

года, что мало информативно. Во втором случае дата и время будут выведены в удобном для пользователя формате.

Правильным является вариант а), хотя вариант б) с некоторой натяжкой

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

Упражнения

Попытайтесь в качестве упражнение только.) написать программу, которая бы выводила список файлов текущего и всех вложенных каталогов.




11-й час

Взаимодействие с операционной системой

До сих пор при изучении Perl мы не выходили за рамки этого языка, так как в нем были предусмотрены все необходимые средства: сортировка данных, получение списка файлов каталога, обработка файлов конфигурации и др. Однако довольно часто

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

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

Perl позволяет объединить несколько простых и малофункциональных утилит в

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

Программист получает возможность использовать удобные ему средства разработки,

что в конечном счете повышает скорость и качество разработки. Таким образом, интеграция системных утилит сулит значительные преимущества. Основные темы этого занятия.

• Использование функции systemt).

• Перенаправление выходного потока.

• Проблема переносимости программ.


Большинство примеров данного занятия состоит из двух частей. Одна часть предназначена для выполнения в среде Windows и DOS, а другая - в среде UNIX. Если же будет приведен только один пример, то мы обязательно укажем, какие изменения (обычно небольшие) нужно внести в программу, чтобы она работала в той или иной системе.

172 Чть П. углубляемся e !



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