При выводе символов новой строки
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:
Содержание Назад Вперед