Чтение файлов, переданных через командную
autoflush дескриптор выражение
Чтение файлов, переданных через командную строку
Имена файлов, стоящие после имени сценария в командной строке, передаются коду в качестве потока ввода:
% printem file1.txt file2.txt
Если после этой команды обратиться к STDIN, то вместо ввода с консоли (клавиатуры) мы получим объедиенное содержимое файлов file1.txt и file2.txt:
while (<>) {
print;
}
Here is
a
file!
Here is
another
file!
Чтение из дескриптора файла
Выражение вида <дескриптор> возвращает следующую строчку, считанную из файла. Это полезно, когда надо прочитать открытый файл. Например, следующий фрагмент кода читает весь текст из файла file.txt:
open (FILEHANDLE, "<file.txt")
or die ("Cannot open file file.txt");
while (<FILEHANDLE>) {
print;
}
Here
is
a
file!
Если дескриптор файла не указан, используется STDIN.
read — чтение входных данных
Функция read читает данные из дескриптора файла:
read дескриптор, скаляр, длина, смещение
read дескриптор, скаляр, длина
(Обратите внимание: функция read не является парной для функции write!)
Эта функция пытается прочитать из дескриптора файлов число байтов, указанное параметром длина, и записать их в скалярную переменную.
Параметр смещение (если он задан) указывает, с какой позиции от начала скаляра (строки) надо размещать считанные байты. Если он не задан или равен нулю, то скалярной переменной присваивается значение-строка, считанная из файла, а прежнее содержимое переменной теряется. Если же задано смещение, то текущим значением скалярной переменной должна быть текстовая строка, от которой берется несколько первых байтов, к ним добавляются байты, считанные из файла, и все запоминается в качестве нового значения переменной. Поэтому длина строки может уменьшиться или увеличиться. Если текущее значение скаляра не является текстовой строкой, оно преобразуется к формату текстовой строки, — например, число 123.45 в строку "123.45". Если текущая длина строки меньше указанного смещения, она дополняется двоичными нулями. (Для экспериментальной проверки полезно воспользоваться функцией vec из главы 10.)
Содержание Назад Вперед