Вопросы и ответы

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



Проблема заключается во второй строке кода. Переменная DIRHANDLE является дескриптором каталога, а не файла! Содержимое каталога нельзя читать с помощью углового оператора (о). Чтобы исправить ошибку, замените вторую строку на


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


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


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


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


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


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


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



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

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: