Анимация
JavaScript
|
Главная Библионтека Почему функции "*.*") возвращает не вс йлы, находящиеся в каталоге? Потому что шаблон *.* соответствует только тем файлам, в имени которых содержится точка. Чтобы получить список всех файлов каталога, используйте конструкцию 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 |