Глава 13: Манипулирование файлами и каталогами
13.1 Удаление файла
Вы уже научились создавать в Perl файл, открывая его для вывода через дескриптор файла. Сейчас ми освоим опасную процедуру удаления файлов (очень кстати для тринадцатой глави, не правда ли?).
Perl-функция unlink (названная по имени системного вызова POSIX) удаляет одно из имен файла (которнй может иметь и другие имена). Когда удаляется последнее имя файла и ни в одном процессе он не открыт, удаляется и сам файл. Это в точности соответствует тому, что делает UNIX-команда rm. Поскольку у файла часто бывает только одно имя (если ви не создавали жесткие сснлки), то в большинстве случаев удаление имени можно считать удалением файла. Приняв это допущенне, покажем, как удалить файл fred, а затем удалить файл, имя которого вводится во время выполнения программы:
unlink ("fred"); # распрощаемся с файлом fred print "what file do you want to delete?";
chomp($name = <STDIN>);
unlink($name);
Функция unlink может принимать также список имен, подлежащих удалению:
unlink ("cowbird","starling"); # убьем двух зайцев unlink
<*.о>; # как "rm *.o" в shell
Операция <*.o> выполняется в списочном контексте и создает список имен файлов, которые совпадают с образцом. Это именно то, что нужно передать в unlink.
Функция unlink возвращает количество успешно удаленных файлов. Если указан только один аргумент и соответствующий ему файл удаляется, то возвращается единица; в противном случае возвращается нуль. Если заданы имена трех файлов, но удалить можно только два, то возвращается два. Установить, какие именно файлы были удалены, на оснований возвра-щенного значения невозможно, поэтому если вам нужно определить, какой файл не удален, удаляйте их по одному. Вот как производится удаление всех обьектных файлов (имена которых заканчиваются на .о) с выдачей сообще-ния об ошибке для каждого файла, который удалить нельзя:
foreach $file (<*.o>) { # пройти по списку .о-файлов
unlink($file) || warn "having trouble deleting $file: $!";
}
Если unlink возвращает 1 (это означает, что единственный указанный файл был удален), то функция warn пропускается. Если имя файла не может быть удалено, результат "О" означает "ложь", поэтому warn выполняется. Абстрактно это можно прочитать так: "удали этот файл или сообщи мне о нем".
Если функция unlink дается без аргументов, то по умолчанию вновь используетея переменная $_. Так, приведеними выше цикл можно записать следующим образом:
foreach (<*.о>) { # пройти по списку .о-файлов
unlink || warn "having trouble deleting $_: $!";
}
Назад | Вперед
Содержание (общее) | Содержание раздела
Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
|