Perl - специальный справочник


           

Perl. Специальный справочник - стр. 171


or die ("Cannot open file format.txt");

format FILEHANDLE =

@<<<<<<<<<<<@>>>>>>>>>>>>>>>

$text1, $text2

.

$text1 = "Hello";

$text2 = "there";

write FILEHANDLE;

close (FILEHANDLE);

Hello there!

binmode — установка двоичного режима

Некоторые операционные системы (например, DOS и Windows) различают текстовые и двоичные файлы (точнее, режимы работы с файлами). При выводе символов новой строки \n автоматически заменяется парой CR+LF (\r\n), а при вводе \r\n заменяется символом новой строки \n. Чтобы при выводе использовать только символы \n, используется функция binmode:

binmode дескриптор

Рассмотрим пример использования Perl в MS DOS. При выводе строки, завершающейся символом \n в выходном файле появится \r\n (ASCII-коды 0x0d0x0a):

open (FILEHANDLE, ">data.txt")

or die ("Cannot open file data.txt");

print FILEHANDLE "Hello\nthere!\n";

close (FILEHANDLE);

C:\debug data.txt

-d

107A:0100 48 65 6C 6C 6F 0D 0A 74-68 65 72 65 21 0D 0A

Hello..there!...

(Для просмотра файла в шестнадцатеричном режиме в данном случае использовался отладчик MS DOS, хотя другие программы, например, Norton Commander гораздо удобнее.)

Если же вызвать функцию binmode, то в файл попадут только символы новой строки:

open (FILEHANDLE, ">data.txt")

or die ("Cannot open file data.txt");

binmode FILEHANDLE;

print FILEHANDLE "Hello\nthere!\n";

close (FILEHANDLE);

C:\debug data.txt

-d

107A:0100 48 65 6C 6C 6F 0A 74-68 65 72 65 21 0A

Hello.there!...

Управление буферизацией вывода

Можно заставить Perl сбрасывать на диск (или другой носитель) буфер вывода после каждой операции print или write. Для этого переменной Perl $| надо присвоить ненулевое значение:

$| = 1;

(В противном случае все, что направляется в поток вывода, накапливается в буфере (области памяти) и записывается только после заполнения буфера или закрытия потока.) Того же результата можно добиться, если вызвать функцию autoflush:




Содержание  Назад  Вперед