Глава 6.11. Ввод-вывод, файлы и каталоги6.11.1. Функции ввода-выводаВсе описанные в этом разделе функции оперируют с описателями файлов (см. п. 6.2.11). Обратите внимание, что PERL поддерживает два уровня ввода-вывода. Ввод-вывод низкого уровня (без буферизации данных) реализован функциями sysread, syswrite и sysseek. Остальные функции ввода-вывода используют внутреннюю буферизацию файлов для ускорения операций чтения и записи и не совместимы с функциями низкого уровня. Иными словами, для каждого открытого нами файла мы должны использовать только одну группу операций: либо буферизованных, либо нет. Смешение функций из этих групп может привести к потере данных.
Функция binmodeСинтаксис: binmode файл, режим? Аргументы: файл описатель файла режим строковое выражение Функция binmode задает двоичный или текстовый режим ввода-вывода для указанного файла. Режим задается строкой ":raw" для двоичного режима и ":crlf" для текстового режима. Если этот аргумент опущен, то задается двоичный режим. Данная функция должна вызываться после открытия файла, но до всех операций ввода или вывода с этим файлом. Разные платформы вкладывают разное содержание в понятия "текстовый файл" и "двоичный файл". В частности, в Unix эти понятия не различаются, а в DOS и Windows текстовые файлы имеют следующие особенности:
В целях совместимости рекомендуется вызывать binmode для двоичных файлов и не вызывать для текстовых. Пример: open BINFILE, "myfile.dat" or die "Cannot open file: $!\n"; binmode BINFILE; . . . close BINFILE; Функция closeСинтаксис: close файл? Аргументы: файл описатель файла Результат: логическое значение Функция eof закрывает указанный файл. Она возвращает истину, если сброс файловых буферов на диск и закрытие файла прошли успешно, и ложь в противном случае. Если аргумент опущен, то закрывается файл, принятый по умолчанию для вывода (см. описание функции select). Если файл был открыт с перенаправлением вывода, то функция close дожидается завершения работы конвейера и возвращает результат его работы. Пример: open(OUTPUT, '|sort >temp.tmp') or die "Can't start sort: $!"; . . . # выводим данные в OUTPUT close OUTPUT or warn $! ? "Error closing sort pipe: $!" : "Exit status $? from sort"; open(INPUT, 'temp.tmp') or die "Can't open 'temp.tmp' for input: $!"; Функция eofСинтаксис: eof файл? eof() Аргументы: файл описатель файла Результат: логическое значение Функция eof возвращает 1, если следующее чтение файла обнаружит конец файла или если данный файл не был открыт. В противном случае возвращается 0. Если аргумент опущен, то проверяется файл, из которого производилась последняя операция чтения. Функция eof() имеет особое назначение. Она относится к псевдофайлу, образованному списком файлов, указанных в командной строке программы, и проверяет наличие входных записей в нем. Подробнее об этом см. описание операции <>. Данная функция используется редко, поскольку все функции ввода PERL возвращают undef при достижении конца файла или ошибке чтения. Функция filenoСинтаксис: fileno файл Аргументы: файл описатель файла Результат: числовое значение Функция fileno возвращает системный дескриптор файла или undef, если данный файл не был открыт. Обычно она используется в программах, взаимодействующих с функциями, написанными на C. Кроме того, с ее помощью можно проверить, указывают ли два описателя на один и тот же файл: if (fileno(FILE1) == fileno(FILE2)) { . . . } Функция flockСинтаксис: flock файл, операция Аргументы: файл описатель файла операция числовое выражение Результат: логическое значение Функция flock выполняет заданную операцию блокировки/разблокировки над файлом
и возвращает истину в случае успеха и ложь при неудаче. Операция задается числом или символической константой
из модуля Fcntl (нужна директива
Флаг LOCK_NB употребляется в сочетании с LOCK_SH или LOCK_EX. Если его нет, то функция ждет, пока файл не будет заблокирован; если он установлен, то возврат из функции производится без ожидания (в этом случае мы должны обязательно проверить возвращаемый результат). В Windows 95/98 эта функция не реализована (вызывает фатальную ошибку). Пример: use Fcntl ':flock'; open(MYFILE, ">test.txt") or die "Can't create file: $!"; flock(MYFILE, LOCK_EX); print MYFILE $msg, "\n"; flock(MYFILE, LOCK_UN); Функция getcСинтаксис: getc файл? Аргументы: файл описатель файла Результат: строковое значение Функция getc читает очередной символ из файла или из STDIN, если аргумент опущен. Если STDIN это клавиатура, то она ждет нажатия клавиши. Функция ioctlСинтаксис: ioctl файл, операция, параметр Аргументы: файл описатель файла операция числовое выражение параметр скалярное выражение Результат: числовое значение Функция ioctl системно-зависима. В Unix она вызывает стандартную функцию C ioctl, предназначенную для управления устройствами ввода-вывода, а в Windows используется только для сокетов и вызывает функцию ioctlsocket, реализованную в Winsock API. Мы не приводим здесь описания этих системных функций, см. документацию на соответствующие операционные системы. Функция openСинтаксис: open файл, режим, имя open файл, имя? Аргументы: файл описатель файла режим, имя строковые выражения Результат: числовое значение Функция open выполняет открытие файлов в стиле командного интерпретатора Unix. Имя задает имя открываемого файла. В случае успешного открытия файла его описатель заносится в переменную файл и возвращается ненулевое значение. При неудаче возвращается значение undef. Если имя опущено, то PERL считает, что имя файла хранится в скалярной переменной с тем же именем, что и файл, например: open(MYFILE, 'test.txt'); # открываем TEXT.TXT $MYFILE = 'test.txt'; open(MYFILE); # то же самое Эта функция имеет два формата. В первом формате параметр режим содержит режим открытия файла, а параметр имя имя файла. Во втором формате параметр имя содержит и имя файла, и необязательный режим его открытия (сначала режим, затем имя, между ними допустимы пробелы); при этом начальные и конечные пробелы из имени файла удаляются перед его открытием. Режим открытия файла задается следующим образом:
В Windows для создания конвейеров следует использовать альтернативный синтаксис: второй формат функции open, в которой имя файла начинается с символа '|' (эквивалентно режиму '|-') или заканчивается символом '|' (эквивалентно режиму '-|'). Во втором формате команды после режимов '>', '>>', '<', '+>', '+>>', '+<' можно добавить символ '&'. В этом случае остаток строки интерпретируется как имя описателя файла, если это строка, или дескриптор файла, если это число. Этот синтаксис следует традиции командного интерпретатора Bourne и позволяет нам дублировать описатели открытых файлов. Кроме того, в этом формате поддержаны два полезных сокращения: имя файла '-' указывает на STDIN, а '>-' на STDOUT. Примеры: open(MYFILE, 'input.txt'); # открывает файл для чтения open(LOG, '>>mylog'); # открывает протокол для дозаписи open(DBASE, '+<', 'data.dbf'); # открывает БД для обновления open(DBASE, '+<data.dbf'); # то же самое open(SORTED, "|sort >temp.tmp"); # сортировка результатов записи в файл open(OUT, ">&STDOUT"); # открывает копию STDOUT open(F, '-|', "cat -n '$file'"); # открывает $file на чтение в Unix open(F, "cat -n '$file'|"); # то же самое Функция printСинтаксис: print файл, список print список? Аргументы: файл описатель файла список список выражений Функция print выводит список строк (в частности, одну строку) в заданный файл. Если аргумент файл опущен, то вывод производится в файл, принятый по умолчанию для вывода (см. описание функции select). Если и список опущен, то выводится содержимое специальной переменной $_. Если значение переменной $, не пусто, то оно выводится между элементами списка. Если значение переменной $\ не пусто, то оно выводится после вывода списка. Обратите внимание, что если даже вы передаете этой функции одно выражение для вывода, оно вычисляется в контексте списка. Если файл задается выражением, то вам придется указать блок, который возвращает значение описателя файла. Примеры: @a = (1, 2, 3); print @a; # выводит на STDOUT строку '123' print 1, 2, 3; # то же самое $, = ' '; print MYFILE 'aaa', 'bbb', 'ccc'; # выводит в MYFILE строку 'aaa bbb ccc' print { $OK ? STDOUT : STDERR } "$message\n"; Функция readСинтаксис: read файл, скаляр, длина, смещение? Аргументы: файл описатель файла скаляр имя скалярной переменной длина, смещение числовые выражения Результат: числовое значение Функция read пытается считать из заданного файла количество байтов, заданное аргументом длина. Результат чтения заносится в переменную скаляр как строка байтов. Если задан аргумент смещение, то результат заносится в скаляр как в строку, начиная с ее байта с заданным смещением (отрицательное смещение отсчитывается от конца строки). Эта функция возвращает количество фактически считанных байтов, 0 при попытке чтения в конце файла и undef при ошибке чтения. Пример: допустим, что наш файл TEST.DAT начинается с символов abcdef. Тогда сценарий open F, 'test.dat'; read F, $x, 5; print $x; выведет на экран строку abcde. Функция readlineСинтаксис: readline файл Аргументы: файл typeglob описателя файла Результат: строковое значение или список строк Функция readline читает файл с заданным typeglob. В скалярном контексте она считывает очередную запись файла и возвращает ее. В контексте списка она читает файл до конца и возвращает список записей. Ограничитель входных записей задается значением специальной переменной $/. Это внутренняя функция PERLа, реализующая операцию <описатель>, однако вы можете вызывать ее и непосредственно. Например, следующие два оператора эквивалентны: $line = <STDIN>; $line = readline(*STDIN); Функция seekСинтаксис: seek файл, смещение, начало Аргументы: файл описатель файла смещение, начало числовые выражения Результат: числовое значение Функция seek изменяет текущую позицию в заданном файле и возвращает 1 в случае успеха и 0 при неудаче. Новая позиция вычисляется на основании параметров начало и смещение в соответствии со следующей таблицей:
Для использования символических имен параметра начало мы должны добавить в наш сценарий
директиву use Fcntl ':seek'; seek(FILE, 0, 2); # позиционируемся на конец файла seek(FILE, 0, SEEK_END); # то же самое Функцию seek не следует использовать совместно с sysread и syswrite из-за проблем, связанных с внутренней буферизацией ввода-вывода. В этому случае следует пользоваться функцией sysseek. Функция selectСинтаксис: select файл? Аргументы: файл описатель файла Результат: описатель файла Функция select возвращает указатель файла, принятый по умолчанию для вывода. Если параметр файл задан, то он становится новым файлом, принятым для вывода по умолчанию. После этого функции print и write без указания файла вывода будут производить запись в этот файл. Кроме того, специальные переменные, связанные с выводом, теперь будут относиться к этому файлу. Первоначально для вывода по умолчанию принят STDOUT. Следующий пример делает текущим каналом вывода файл REPORT и устанавливает длину страницы вывода для него равной 70 строкам: select(REPORT); $= = 70; Приведем еще один пример, показывающий, как включить автоматический сброс на диск буферов файла STDERR: $old = select(STDERR); $| = 1; select($old); Функция sysopenСинтаксис: sysopen файл, имя, режим, права? Аргументы: файл описатель файла имя строковое выражение режим, доступ числовые выражения Результат: числовое значение Функция sysopen выполняет открытие файлов в стиле языка C. Имя задает имя открываемого файла. В случае успешного открытия файла его описатель заносится в переменную файл и возвращается ненулевое значение. При неудаче возвращается значение undef. Аргумент режим это набор битовых флагов, задающий режим открытия файла. Поскольку числовые значения флагов
системно-зависимы, следует всегда пользоваться их символическими именами. Для доступа к этим именам необходимо включить в
сценарий директиву
Если режим содержит флаг O_CREAT, т. е. если создается новый файл, то мы можем указать аргумент права. Он задает маску прав доступа к файлу, которая будет установлена при первом закрытии нового файла. Формат этой маски приведен в описании функции umask. По умолчанию она равна восьмеричному числу 0666; это означает, что созданный файл будет доступен для чтения и записи. Примеры: use Fcntl; # Открываем существующий фал для чтения sysopen IN, 'data.txt', O_RDONLY; # Создаем новый файл. Если он уже есть, то фатальная ошибка. sysopen OUT, 'data.txt', O_CREAT | O_EXCL or die "Такой файл уже есть!"; # Создаем новый файл. Если он уже есть, то его содержимое теряется. sysopen OUT, 'data.txt', O_CREAT | O_TRUNC; Функция sysreadСинтаксис: sysread файл, скаляр, длина, смещение? Аргументы: файл описатель файла скаляр имя скалярной переменной длина, смещение числовые выражения Результат: числовое значение Функция sysread пытается считать из заданного файла количество байтов, заданное аргументом длина. Результат чтения заносится в переменную скаляр как строка байтов. Если задан аргумент смещение, то результат заносится в скаляр как в строку, начиная с ее байта с заданным смещением (отрицательное смещение отсчитывается от конца строки). Результат равен количеству фактически считанных байтов, 0 при попытке чтения в конце файла и undef при ошибке чтения. Эта функция полностью аналогична функции read, но с одним важным отличием: чтение производится без внутренней буферизации данных. Поэтому ее нельзя смешивать с функциями read, print, write, seek, tell, eof и т. п. В действительности, эта функция полезна только при чтении данных с последовательных устройств типа терминалов. Функция sysseekСинтаксис: sysseek файл, смещение, начало Аргументы: файл описатель файла смещение, начало числовые выражения Результат: числовое значение Функция sysseek изменяет текущую позицию в заданном файле и возвращает 1 в случае успеха и 0 при неудаче. Она полностью аналогична функции seek, но с одним важным отличием: позиционирование производится без внутренней буферизации данных. Поэтому ее нельзя смешивать с функциями read, print, write, seek, tell, eof и т. п. Использование этой функции допустимо только в сочетании с функциями sysread и syswrite. Парной функции systell в PERL'e нет. Вместо нее следует использовать Функция syswriteСинтаксис: syswrite файл, скаляр, длина?, смещение? Аргументы: файл описатель файла скаляр имя скалярной переменной длина, смещение числовые выражения Результат: числовое значение Функция syswrite пытается записать в заданный файл количество байтов, заданное аргументом длина из переменной скаляр как строку байтов. Если длина не задана, то переменная скаляр выводится в файл полностью. Если задан аргумент смещение, то выводятся байты из строки скаляр, начиная с ее байта с заданным смещением (отрицательное смещение отсчитывается от конца строки). Результат равен количеству фактически записанных байтов, 0 при попытке чтения в конце файла и undef при ошибке чтения. Эта функция выполняет запись без внутренней буферизации данных. Поэтому ее нельзя смешивать с функциями read, print, write, seek, tell, eof и т. п. Функция tellСинтаксис: tell файл? Аргументы: файл описатель файла Результат: числовое значение Функция tell возвращает текущую позицию в заданном файле. Если файл опущен, то возвращается текущая позиция в файле, из которого производилось последнее чтение. Пример: open OUT, '>test.txt'; print OUT 'abc'; $pos = tell OUT; # $pos равно 3 Функция truncateСинтаксис: truncate файл, длина Аргументы: файл описатель файла длина числовое выражение Результат: логическое значение Функция truncate усекает заданный файл до заданной длины. Она возвращает истину в случае успеха и undef при неудаче. Windows требует, чтобы файл был открыт для дозаписи в конец файла (т. е. либо функцией
6.11.2. Форматирование выводаPERL поддерживает два механизма форматирования данных для вывода. Первый механизм заимствован из языка FORTRAN и основан на шаблонах вывода: функция format задает шаблон вывода, а функция write выводит данные в соответствии с заданным шаблоном. Второй механизм заимствован из языка C и реализован функциями printf и sprintf, которые выводят данные в файл в соответствии с заданной спецификацией формата.
Функция formatСинтаксис: format имя = шаблон . Функция format декларирует шаблон вывода с заданным именем. Имена шаблонов образуют собственное пространство имен; иными словами, функция ABC и шаблон ABC не имеют ничего общего. По умолчанию принято, что шаблон вывода для файла с описателем FILE имеет имя FILE. Естественно, что мы можем использовать для форматирования вывода в FILE и шаблоны с другими именами. Шаблон вывода состоит из строк трех видов:
Форматные строки выводятся в точности так, как они заданы, за исключением специальных полей, в которые подставляются значения, заданные в строках аргументов. Специальные поля начинаются с символа @ или ^. Поля, начинающиеся с символа @, могут иметь следующий вид:
Если выводимая строка не помещается в заданное поле, то она обрезается. Специальные поля, которые начинаются с символа ^, обрабатываются иначе. Если поле заполнено символом #, то в него также выводится числовое значение, но с одной особенностью: если значение неопределено, то поле выводится пустым. Для остальных заполнителей (<, > и |) соответствующий аргумент должен быть не выражением, а скалярной переменной, содержащей строковое значение. PERL выводит столько символов этой строки, сколько поместится в заданное поле, а затем удаляет эту часть строки из аргумента. Затем поле может повториться на следующей строке и т. д., позволяя вывести длинный текст в несколько строк. Разбивка строки производится только по тем символам, которые заданы в специальной переменной $:. При желании можно добавить в конец последнего поля символы "...", чтобы показать, что строка слишком длинна для полного вывода. Поля, начинающиеся с символа ^, можно использовать для вывода записей переменной длины. Если исходный текст короток, то мы можем подавить вывод пустых строк, помещая в форматные строки символ ~. Если поместить в строку два символа ~ подряд, то ее вывод будет повторяться до тех пор, пока все поля в строке не будут исчерпаны. Для вывода заголовка на каждой странице отчета следует использовать функцию format с именем шаблона, состоящим из имени шаблона вывода отчета плюс слово "_TOP". Пример: следующая программа format MY_TOP = Тестовая страница . format MY = Тест: @<<<<<<<< @||||| @>>>>> $str, $x, '$'.int($num) . $str = 'строка'; $x = '1'; $num = 123.456; $~ = 'MY'; write; выведет на консоль такой отчет: Тестовая страница Тест: строка 1 $123 Функция formlineСинтаксис: formline шаблон, список Аргументы: шаблон имя шаблона список список выражений Результат: логическая истина Это внутренняя функция, используемая функцией write. Она применяет заданный шаблон к заданному списку значений и заносит сформатированный результат в специальную переменную $^A (аккумулятор форматного вывода). Функция printfСинтаксис: printf файл? формат, список Аргументы: файл описатель файла формат спецификация формата список список выражений Эта функция эквивалентна выражению printf STDOUT "Версия PERL: v%vd\n", $^V; # "Версия PERL: v5.6.0" Функция sprintfСинтаксис: sprintf формат, список Аргументы: формат спецификация формата список список выражений Результат: строковое значение Эта функция выполняет форматирование списка в соответствии с правилами, заданными в строке формата, и возвращает полученную таким образом строку. Правила описания форматных строк PERL заимствовал практически без изменений из языка C; тем не менее, для полноты описания мы приводим эти правила здесь. Форматная строка является комбинацией обычных символов и специальных полей спецификации формата. Поле спецификации формата состоит из символа % и латинской буквы, задающей тип преобразования. Между символом % и буквой типа могут размещаться уточняющие флаги, описанные ниже. Если после символа % стоит буква, неизвестная функции sprintf, то символ % игнорируется, а буква воспринимается как обычный символ; в частности, для вывода в результирующую строку самого символа % можно использовать поле %%. PERL поддерживает следующие типы преобразований:
Между символом % и буквой типа могут указываться следующие флаги:
Вместо числа в качестве флага может быть задан символ *. В этом случае значение этого числа извлекается из очередного элемента списка аргументов. Если полученная таким образом ширина поля отрицательна, то поле выравнивается по левому краю. Примеры форматирования строк: %s = sprintf "%#0.8x\n", 256; # %s = "0x00000100" %s = sprintf "%+10E\n", 256; # %s = "+2.560000E+002" %s = sprintf "Версия PERL: %vd\n", $^V; # %s = "Версия PERL: 5.6.0" Функция writeСинтаксис: write файл? Аргументы: файл описатель файла Эта функция выводит форматированную запись в указанный файл, используя шаблон, ассоциированный с данным файлом. По умолчанию этот шаблон имеет то же имя, что и описатель файла, но шаблон, ассоциированный с файлом, принятым для вывода по умолчанию, может иметь любое имя; для связи его с файлом достаточно занести имя шаблона в переменную $~. Пример вызова этой функции см. в описании функции format. 6.11.3. Функции управления файлами
Функция -attrСинтаксис: -attr файл Аргументы: attr буква, задающая атрибут файла файл описатель файла Результат: логическое значение Эта функция проверяет заданный атрибут файла и возвращает истину или ложь в зависимости от результатов проверки. Возможные атрибуты задаются следующими буквами:
Пример: print "Файл доступен для чтения\n" if -r FILE; Функция chmodСинтаксис: chmod маска, список Аргументы: маска числовое выражение список список имен файлов Результат: числовое значение Функция chmod изменяет маску прав доступа к файлам, указанным в списке,
на заданную, и возвращает количество файлов, у которых это изменение прошло успешно. Маска
задается числом или символической константой из модуля Fcntl (нужна директива
В Windows поддерживаются только флаги _S_IEXEC, _S_IWRITE и _S_IREAD. Пример: use Fcntl ':mode'; chmod _S_IREAD | _S_WRITE, 'myfile.txt'; Функция globСинтаксис: glob образец? Аргументы: образец строковое выражение Результат: список строк Функция glob возвращает список имен файлов, соответствующих заданному образцу. Если образец опущен, то используется содержимое специальной переменной $_. Строка считается образцом, если она содержит хотя бы один из специальных символов "?", "*" или "[". Раскрытие образца это операция, преобразующая образец в список соответствующих ему полных имен файлов. Правила соответствия определены следующим образом:
Квадратные скобки используются для задания групп символов так же, как в регулярных выражениях PERL. Можно задавать группы одиночных символов ("[abc]"), диапазоны символов ("[a-z0-9]") и все символы, кроме указанных ("[!abc]"). Для включения в образец специального символа как обычного перед ним ставится обратная косая черта "\". Примеры: @list = glob '*.c'; # возвращает имена всех файлов, оканчивающихся на ".c" @list = glob '*'; # возвращает имена всех файлов (кроме тех, что начинаются с точки!) @list = glob 'dir/%[0-9]*'; # возвращает имена всех файлов в каталоге dir, у которых второй символ имени цифра В DOS и Windows использование этой функции с именами каталогов затруднительно, поскольку там имена каталогов разделяются не косой чертой "/", а обратной косой чертой "\", которая в glob имеет специальное назначение. Поэтому для этих систем существует специальный модуль File::DosGlob, который входит в стандартный дистрибутив PERL. Функция linkСинтаксис: link старое имя, новое имя Аргументы: старое имя, новое имя строковые выражения Результат: логическое значение Функция link создает файл с новым именем и связывает его с существующим файлом, имеющим старое имя. Возвращает ненулевое значение при удачном завершении и нуль при неудаче. В Windows реализована только для файловой системы NTFS (Windows NT/2000). Функция lstatСинтаксис: lstat файл? Аргументы: файл описатель файла или имя файла Результат: список значений Функция lstat возвращает ту же информацию о файле, что и функция stat, но эта информация возвращается о символической ссылке, а не о файле, на который эта ссылка указывает. Если операционная система не поддерживает символические файловые ссылки, то эта функция эквивалентна stat. Если файл опущен, то используется содержимое специальной переменной $_. Функция renameСинтаксис: rename старое имя, новое имя Аргументы: старое имя, новое имя строковые выражения Результат: логическое значение Функция link переименовыает файл со старым именем, присваивая ему новое имя. Возвращает ненулевое значение при удачном завершении и нуль при неудаче. Пример: rename 'myfile.txt', 'mynewfile.txt'; Функция statСинтаксис: stat файл? Аргументы: файл описатель файла или имя файла Результат: список значений Функция stat возвращает массив информации о заданном файле. Если файл опущен, то используется содержимое специальной переменной $_. При неудаче возвращается нулевое значение. Информационный массив имеет следующее строение:
Все времена в этом массиве хранятся как количество секунд с начала эпохи, за которую принято 00:00 по Гринвичу 1 января 1970 г. В Windows поля 0, 1 и 10 лишены смысла. Типичный пример: ($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size, $atime, $mtime, $ctime, $blksize, $blocks) = stat('myfile.txt'); Если параметром файл является символ _, то возвращается массив данных от последнего вызова stat.
В скалярном контексте возвращается логическое значение, означающее успех или неудачу, и в случае удачи
заполняется внутренний массив, который может быть считан вызовом Функция unlinkСинтаксис: unlink список? Аргументы: список список строковых выражений Результат: логическое значение Функция unlink удаляет файлы, имена которых перечислены в списке. Если список опущен, то используется содержимое специальной переменной $_. Возвращается количество успешно удаленных файлов. Примеры: $count = unlink 'a.txt', 'b.txt', 'c.txt'; unlink @list; unlink <*.bak>; Для удаления каталогов следует пользоваться функцией rmdir. Функция utimeСинтаксис: utime список? Аргументы: список список строковых выражений Результат: логическое значение Функция utime изменяет время последнего доступа и последнего изменения у файлов, имена которых перечислены в списке. Новые значения этих времен должны быть первыми двумя элементами списка. Если список опущен, то используется содержимое специальной переменной $_. Возвращается количество успешно измененных файлов. Пример: $now = time; utime $now, $now, 'myfile.txt'; В Windows 95/98 с файловой системой FAT время последнего доступа к файлу не поддерживается, поэтому данная функция изменяет только время последнего изменения заданных файлов. 6.11.4. Функции управления каталогами
Функция chdirСинтаксис: chdir имя? Аргументы: имя строковое выражение Результат: логическое значение Функция chdir изменяет текущий рабочий каталог на каталог с заданным именем. Если имя опущено, то используется каталог, заданный в переменной среды $ENV{HOME}; если такой переменной нет, то используется каталог, заданный в переменной среды $ENV{LOGDIR}; если и ее нет, то не делается ничего. Возвращается истина при успешной смене текущего каталога и ложь при неудаче. Пример: chdir "c:\\windows\\temp" or die "Не могу сменить каталог: $!\n"; Функция closedirСинтаксис: closedir каталог Аргументы: каталог описатель каталога Результат: логическое значение Функция closedir закрывает каталог, ранее открытый функцией opendir. Возвращается истина при успешном закрытии каталога и ложь при неудаче. Пример см. в описании opendir. Функция mkdirСинтаксис: mkdir имя, маска? Аргументы: имя строковое выражение маска числовое выражение Результат: логическое значение Функция mkdir создает новый каталог с заданным именем и заданной маской прав доступа. Права доступа задаются так же, как в функции umask; если маска опущена, то ее значение принимается равным 0777. Возвращается истина при успешной смене текущего каталога и ложь при неудаче. Пример: mkdir "c:\\mydir" or die "Не могу создать каталог: $!\n"; Функция opendirСинтаксис: opendir каталог, имя Аргументы: каталог описатель каталога имя строковое выражение Результат: логическое значение Функция opendir открывает каталог с заданным именем и заносит его описатель в переменную каталог. Возвращается истина при успешном открытии каталога и ложь при неудаче. Описатели открытых каталогов используются функциями readdir, telldir, seekdir, rewinddir и closedir. Следует помнить, что описатели каталогов имеют собственное пространство имен, не совпадающее с пространством имен описателей файлов. Приведем пример, который выводит на экран имена всех файлов в текущем каталоге Windows с расширением '.pl': opendir(DIR, '.'); @files = grep {!(/^\./) && /\.pl$/} readdir(DIR); closedir(DIR); print "$_\n" foreach @files; Функция readdirСинтаксис: readdir каталог Аргументы: каталог описатель каталога Результат: строка или список строк Функция readdir считывает очередной элемент каталога, открытого функцией opendir и возвращает его. В списочном контексте возвращается список всех элементов каталога с текущего элемента и до конца. Если каталог просмотрен до конца, то возвращается undef в скалярном контексте и нулевой список в списочном контексте. Пример см. в описании opendir. Функция rewinddirСинтаксис: rewinddir каталог Аргументы: каталог описатель каталога Функция rewinddir "перематывает" заданный каталог в начало. Она используется совместно с функцией readdir для многократного просмотра элементов каталога. Функция rmdirСинтаксис: rmdir имя? Аргументы: имя строковое выражение Результат: логическое значение Функция rmdir удаляет каталог с заданный именем. Если аргумент опущен, то используется содержимое специальной переменной $_. Удаление каталога возможно только тогда, когда в нем нет файлов. Возвращается истина при успешном удалении каталога и ложь при неудаче. Пример: rmdir "c:\\mydir" or die "Не могу удалить каталог: $!\n"; Функция seekdirСинтаксис: seekdir каталог, позиция Аргументы: каталог описатель каталога позиция числовое выражение Функция seekdir устанавливает текущую позицию в заданном каталоге равной заданной позиции. Позиция должна быть значением, ранее полученным вызовом функции telldir. Функция telldirСинтаксис: telldir каталог Аргументы: каталог описатель каталога Результат: числовое значение Функция telldir возвращает текущую позицию в заданном каталоге. Это значение может быть в дальнейшем использовано для вызова функции seekdir. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||