Справочник по Perl : Функции ввода/вывода

смотрим также

Материал из Справочник Web-языков

Перейти к: навигация, поиск


Содержание

binmode

Подготавливает файл, ассоциированный с дескриптом ДЕСКРИПТОР, для чтения и записи в двоичном формате, а не в текстовом, в операционных системах, которые различают двоичные и текстовые файлы. В Unix эта функция не имеет никакого эффекта; необходима в MS-DOS и других архаичных системах, иначе двоичный файл может быть испорчен.

binmode ДЕСКРИПТОР

dbmclose

Разрывает связывание хеш-массива и файлом базы DBM. Заменена функцией untie().

dbmclose ХЕШ

dbmopen

Создает связывание хеш-массива с файлом базы DBM, имя которого определяется значением параметра ФАЙЛ_DB. Заменена функцией tie(). Файл базы данных открывается в режиме, указанном параметром РЕЖИМ.

dbmopen ХЕШ, ФАЙЛ_DB, РЕЖИМ

die

Вне тела функции eval() выводит значения элементов списков, заданного параметром СПИСОК, в стандартный файл ошибок STDERR и завершает выполнение сценария Perl с текущим значением специальной переменной $!. Если используется в теле функции eval(), то сообщение об ошибке помещается в переменную $@ и функция eval() завершается с неопределенным значением. Такое поведение позволяет использовать функцию die() для генерирования исключительных состояний.

die СПИСОК

Применяется также в функциях, относящихся к управлению выполнением программ.

eof

Тестирует файл, ассоциированный с дескриптом, заданным параметром ДЕСКРИПТОР, на конец файла. Возвращает 1, если следующая операция чтения из файла возвратит конец файла. Употребленная без параметра, использует в качестве параметра файл, для которого выполнялась последняя операция чтения. Если используется с пустыми скобками eof(), то тестирует символ конца самого последнего файла из списка файлов, переданных в сценарий через командную строку.

eof ДЕСКРИПТОР
eof ()
eof

fileno

Возвращает числовой системный дескриптор для файла, ассоциированного с дескриптором, заданным параметром ДЕСКРИПТОР.

fileno ДЕСКРИПТОР

flock

Блокирует файл, ассоциированный с дескриптором, заданным параметром ДЕСКРИПТОР, для выполнения другими пользователями операций, определенных параметром ОПЕРАЦИЯ. Возвращает булево значение Истина в случае успешной блокировки файла и Ложь в противном случае. Блокирует полностью весь файл, а не отдельные записи.

flock ДЕСКРИПТОР, ОПЕРАЦИЯ

format

Объявляет формат, используемый для вывода функцией write().

format ИМЯ_ФОРМАТА = 
ФОРМАТЫ_СТРОК

Параметр ИМЯ_ФОМАТА представляет правильный идентификатор Perl. Он должен в точности соответствовать имени дескриптора файла, который используется в качестве единственного параметра в функции вывода write().

Так как операция format не является вычисляемой операцией Perl, то объявление формата может осуществляться в любом месте программы. Обычно все объявления форматов задаются либо в начале, либо в конце программы.

getc

Функция getc возвращает символ в текущей позиции файла, дескриптор которого передан ей в качестве параметра, или неопределенное значение в случае достижения конца файла или возникновения ошибки. Если функция вызывается без параметра, то она читает символ из стандартного файла вывода STDIN.

getc;       # Чтение символа из STDIN
getc F1;    # чтение символа в текущей позиции файла с дескриптором F1

print

print ДЕСКРИПТОР СПИСОК;

Здесь ДЕСКРИПТОР представляет дескриптор файла, в который функция выводит строковые данные, представленные списком вывода СПИСОК. Он может состоять из переменных, элементов массивов и выражений, вычисляемых как строковые данные. Дескриптор файла создается функцией open(). Он может быть опущен, и в этом случае вывод осуществляется в стандартный файл вывода STDOUT, если только функцией select() не выбран другой файл вывода по умолчанию. Обычное стандартное устройство вывода - экран монитора компьютера.

Функция print при выводе своего списка не завервает его символом новой строки "n". Это означает, что следующая функция print начнет вывод на экран непосредственно после последнего выведенного предыдущей функцией print символа. Если такое поведение не желательно, то следует список вывода каждой функции print явно завершать строкой, содержащей символ новой строки, или включать его последним символом последнего элемента списка вывода.

Пример 1:

#! perl -w
print "Строка 1:";
print "Строка 2:n";
print "Строка 3:","n";
print STDOUT "Строка 4:n";


Вот что получится на экране :

Строка 1:Строка 2:
Строка 3:
Строка 4:


Вторая функция print начинает свой вывод на той же строке, на которой завершила вывод первая функция, в которой в списке вывода нет символа перехода на новую строку. В четвертой функции явно указан дескриптор стандартного файла вывода STDOUT. Функция print, как и большинство других функций, является списковой операцией, и все элементы списка вывода вычисляются в списковом контексте. Это обстоятельство следует учитывать при использовании в качестве элементов списка вывода выражений с вызовами подпрограмм. Если параметры функции print, включая дескриптор файла, заключены в круглые скобки, то такая синтаксическая конструкция считается термом и в выражении имеет наивычший приоритет вычисления.

Пример 2:

print ($m + $n) **2;

Будет напечатана сумма значений переменных $m и $n, а не их сумму, возведенную в квадрат. Компилятор Perl, обнаружив после лексемы print левую круглую скобку, найдет правую круглую скобку и будет рассматривать их содержимое как список параметров функции print. А так как такая констркция есть терм, то сначало будет выполнена операция печати суммы значений переменных, а потом результат этой операции (Истина = 1) будет возведен в квадрат. Добавление необязательного дескриптора стандартного файла вывода STDOUT исправит подобную ошибку :

Пример 3:

print STDOUT ($m + $n) ** 2; # Выведет ($m + $n) ** 2

Если в функции печати print не задан список вывода, то она по умолчанию выводит содержимое специальной переменной $_ в файл, определенный параметром ДЕСКРИПТОР.

Пример 4:

print;         # Выводится содержимое переменной $_ 
 на экран монитора
print STDOUT;  # Эквивалентен предыдущему оператору
print FILEOUT; # Выводится содержимое переменной $_  в файл
   # с дескриптором FILEOUT

printf

Выводит форматированный список строковых данных в файл, ассоциированный с дескриптом, заданный параметром ДЕСКРИПТОР. Если этот параметр опущен, то вывод осуществляется в стандартный файл вывода STDIN или текущий файл, установленный функцией select(). Параметр ФОРМАТ представляет строку, содержащую символы форматирования, полностью совпадающие с символами форматирования системной функцией Unix printf(3).

printf ДЕСКРИПТОР ФОРМАТ, СПИСОК
printf ФОРМАТ, СПИСОК

read

read ДЕСКРИПТОР, ПЕРЕМЕННАЯ, ДЛИНА [,СМЕЩЕНИЕ];

Читает количество байтов, определенное значением параметра ДЛИНА, в скалярную переменную, определяемую параметром ПЕРЕМЕННАЯ, из файла с дескриптором, заданным первым параметром ДЕСКРИПТОР. Возвращаемое значение - действительное количество прочитанных байтов, 0 при попытке чтения в позиции конца файла и неопределенное значение в случае возникновения ошибки. Параметр СМЕЩЕНИЕ определяет количество сохраняемых байтов из содержимого переменной ПЕРЕМЕННАЯ, т.е. запись прочитанных из файла данных будет добавлена к содержимому переменной после байта, определяемого значением параметра СМЕЩЕНИЕ. Отрицательное значение смещения -n (n - целое число) означает, что из содержимого переменной ПЕРЕМЕННАЯ отбрасываются последние n байтов и к оставшейся строке добавляется запись, прочитанная из файла.

Пример:

Предположим, что файл in.dat содержит три строки данных:

One
Two 
Three
#! perl -w
open (F1, "in.dat") or die "Ошибка открытия файла: $!";
$string = "1234567890"
read F1, $string, 6;                  # Чтение шести байт в переменную без смещения
print $string,"n";                   # $string = "OnenTw"
read F1, $string, 6, length($string);
print $string,"n";                   # $string = "OnenTwonThre"

readdir

В скалярном контексте читает следующее имя элемента каталога, ассоциированного с дескриптором каталога (параметр ДЕСКРИПТОР) функцией opendir(). В списковом контексте возвращает имена всех оставшихся элементов (файлов и каталогов). Если больше не осталось прочитанных элементов, возвращает неопределенное значение в скалярном контексте и пустой список в списковом контексте.

readdir ДЕСКРИПТОР

rewinddir

Устанавливает текущую позицию каталога, ассоциированного с дескриптором ДЕСКРИПТОР, на начало.

rewinddir ДЕСКРИПТОР

seek

seek ДЕСКРИПТОР, СМЕЩЕНИЕ, ТОЧКА_ОТСЧЕТА

Текущая позиция в файле автоматически изменяется в соответствии с выполненными операциями чтения/записи. Ее можно изменить с помощью функции seek(), которой передаются в качестве параметров дескриптор файла, смещение и точка отсчета. Для связанного с дескриптором файла устанавливается новая текущая позиция, смещенная на заданное параметром СМЕЩЕНИЕ число байт относительно точки отсчета.

Параметр ТОЧКА_ОТСЧЕТА может принимать одно из трех значений:

  • 0 - начало файла
  • 1 - текущая позиция
  • 2 - конец файла

Смещение может быть как положительным, так и отрицательным. Обычно оно отрицательно для смещения относительно конца файла и положительно для смещения относительно начала файла. Для задания точки отсчета можно воспользоваться константами SEEK_SET,SEEk_CUP и SEEK_END из модуля IO::Seekable, которые соответствуют началу файла, текущей позиции и концу файла. Естественно, необходимо подключить этот модуль к программе с помощью ключевого слова use.

Например, следующие операторы устанавливают одинаковые текущие позиции в файлах:

use IO::Seekable; 
seek FILE1, 5, 0; 
seek FILE2, 5, SEEK_SET;

Для перехода в начало или конец файла следует использовать нулевое смещение относительно соответствующих точек отсчета при обращении к функции seek():

seek FILE1, 0, 0;   # Переход в начало файла
seek FILE1, 0, 2;   # Переход в конец файла

seekdir

Устанавливает текущую позицию каталога, ассоциированного со своим дескриптором (параметр ДЕСКРИПТОР), для функции readdir(). Параметр ПОЛОЖЕНИЕ должен быть значением, возвращаемым функцией telldir.

seekdir ДЕСКРИПТОР, ПОЛОЖЕНИЕ

select

Возвращает дескриптор текущего установленного файла вывода. Если задан параметр ДЕСКРИПТОР, делает файл, ассоциированный с этим дескриптором текущим установленным файлом вывода. Это приводит к тому, что функции print() и write() без дескрипторов будут осуществлять вывод именно в этот файл.

select [ДЕСКРИПТОР]

syscall

Осуществляет вызов системной команды, заданной первым элементом передаваемого функции списка ( параметр СПИСОК); остальные элементы списка передаются этой команде в качестве параметров. В случае не успешного выполнения системной команды, возвращает -1 и в переменной $! содержится информация об ошибке.

syscall СПИСОК

sysread

Аналогична функции read(), за исключением того, что осуществляет не буферизованный ввод данных, не используя буферы стандартной системы ввода/вывода stdio.

sysread ДЕСКРИПТОР, СКАЛЯР, КОЛИЧЕСТВО[, СМЕЩЕНИЕ]

syswrite

Запись заданного количества байт из скалярной переменной, определяемой параметром СКАЛЯР, в файл, ассоциированный с заданным параметром ДЕСКРИПТОР дескриптором. Возвращает истинное количество прочитанных байтов или неопределенное значение undef привозникновении ошибки. Параметр СМЕЩЕНИЕ задает позицию в строковой переменной СКАЛЯР, с которой записываются в файл данные (по умолчанию с начала строки данных скалярной переменной); отрицательное значение этого параметра определяет запись заданного количества байт, начиная с конца строки. Осуществляет не буферизованный вывод данных, не используя буферы стандартной системы ввода/вывода stdio.

syswrite ДЕСКРИПТОР, СКАЛЯР, КОЛИЧЕСТВО[, СМЕЩЕНИЕ]

tell

Возвращает текущую позицию в файле, ассоциированным с заданным параметром ДЕСКРИПТОР дескриптором. Если параметр опущен, то подразумевается последний файл, для которого была выполнена операция чтения данных.

tell [ДЕСКРИПТОР]

telldir

Возвращает текущую позицию в каталоге, ассоциированного с заданным параметром ДЕСКРИПТОР дескриптором.

telldir ДЕСКРИПТОР

truncate

truncate ДЕСКРИПТОР, ДЛИНА; 
truncate ИМЯ_ФАЙЛА, ДЛИНА;

Функция truncate() усекает файл до заданной длины. Для задания файла можно использовать как имя файла, так и дескриптор открытого файла.

Функция возвращает значение Истина, если длина файла успешно усечена до количества байт, определенных в параметре ДЛИНА, или неопределенное значение undef в противном случае. Под усечением файла понимается не только уменьшение его длины, но и увеличение. Это означает, что значение второго параметра функции truncate() может быть больше истинной длины файла, что позволяет делать "дыры" в содержимом файла, которые в дальнейшем можно использовать для записи необходимой информации, не уничтожая уже записанную в файл.

Пример (Файл с "дырами"):

#! perl -w
# Создание файла с "дырами"
for ($i=1;$i<=3;$i++) {
  open (F, ">>>out.dat") or die $!;
print F "Запись".$i;
  close F;

  open (F, ">>out.dat") or die $!;
truncate F, 19*$i;
  close F;
}
# Запись информации в "дыры"
open (F, "+<out.dat") or die $!;
for ($i=1;$i<=3;$i++) {
  seek F,0,1;
  read F,$recl,7;
  seek F,0,1;
  print F "<CONTENTS:".$i.">"
}
close F;

На каждом шаге первого цикла for в конец файла out.dat записывается информация длиной 7 байтов, а потом его длина увеличивается на 12 байтов, образуя пустое пространство в файле. Следующий цикл for заносит в эти созданные "дыры" информацию длиной 12 байтов, не затирая хранящуюся в файле информацию. Для изменения длины файла функцией truncate приходится закрывать его и снова открывать. Это связано с тем обстоятельством, что функция truncate() добавляет пустое пространство в начало файла, сдвигая в конец его содержимое, если применять ее, не закрывая файл. После выполнения первого цикла for содержимое файла out.dat выглядит так:

Запись1      Запись2      Запись3

По завершении всей программы файл будет содержать следуюшую строку:

Запись1<CONTENTS:1>Запись2<CONTENTS:2>Запись3<CONTENTS:3>

warn

Выводит в стандартный файл ошибок STDERR значения элементов списка, определяемого параметром СПИСОК. Если он пуст, то выводит содержимое специальной переменной $@ (обычно после выполнения функции eval), добавляя строку "t...caught", а если и она пуста, то выводит сообщение "Warning: Something-s wrong"

warn СПИСОК

write

Осуществляет форматный вывод в файл, Ассоциированный с заданным параметром ДЕСКРИПТОР дескриптором, в соответствии с определенным форматом. Если параметр не задан, то выводит в стандартный файл вывода STDOUT или в файл, выбранный функцией select().

write [ДЕСКРИПТОР]
Источник — «http://www.spravkaweb.ru/perl/print/»
Добавить страницу в закладки:
РАЗРЕШАЕТСЯ перепечатывать и копировать информацию ТОЛЬКО ПРИ РАЗМЕЩЕНИИ ссылки на оригинал!
(<A href="http://www.spravkaweb.ru/">Справочник Web-языков</A>)
другие проекты
Rambler\'s Top100 Индекс цитирования