Программисты часто рассматривают текстовые файлы как текстовые потоки просто потому, что один символ следует за другим до маркера конца файла. Если скрипт должен работать с файлом, который ориентирован на работу с блоками, а не потоками, то скрипт может использовать функции sysread и syswrite для обработки фиксированных блоков данных. Функции sysread и syswrite имеют следующие форматы:
$result = sysread(FileHandle, $Var, Length[, Offset]);
$result = syswrite(FileHandle, $Var, Length[, Offset]);
Если в вызове функций указывается сдвиг от начала файла ( Offset ), то функции выполнят поиск места, с которого они начнут операции ввода/вывода.
Функции sysread и syswrite обе передают данные, используя скалярную переменную строкового типа. Поскольку функции обрабатывают фиксированные блоки памяти, то данные могут содержать бинарные значения, включая нули и маркеры конца файла. Если в вызове функции указывается сдвиг от начала файла ( Offset ), то функция выполняет поиск места в файле, с которого начинает выполнять операции ввода/вывода.
Если вы работаете с блоками данных, то скрипты могут также использовать следующие функции ввода/вывода:
$result = seek(FileHandle, Position, Base);
$result = tell(FileHandle);
$result = eof(FileHandle);
Функция seek работает в точности так же, как fseek — функция библиотеки времени выполнения языка С. Параметр Position задает позицию относительно начала отсчета, которая в свою очередь задается параметром Base следующим образом:
· 0 Поиск от начала файлов
· 1 Поиск от текущей позиции
· 2 Поиск от конца файла
Функция tell языка Perl работает в точности так же, как фикция ftell библиотеки времени выполнения языка С. Эта функция возвращает текущую позицию в файле, с которой выполняются операции чтения или записи. Наконец, функция eof , так же как и функция feof языка С, возвращает значение «истинно» или «ложино», которое скрипт может использовать для определения достижения конца файла.