При разработке программы, предназначенной для взаимодействия с сетевым сервером, выполняющим построчный ввод-вывод, в котором для обозначения конца строки применяется комбинация символов CRLF, нельзя обеспечить переносимость программы на другие платформы, установив значение переменной $/ равным rn. Вместо этого, следует явно указывать строку 1512. Чтобы внести большую ясность в этот вопрос, в модулях Socket, которые будут подробно описаны далее, предусмотрена возможность экспортировать глобальные переменные $CRLF и CRLF(), которые возвращают правильные значения.
При выполнении построчного ввода-вывода в системах Microsoft Windows и DOS возникает еще одна сложность. По сложившейся традиции, в системах DOS/Windows проводится различие между дескрипторами файлов, открытыми в “текстовом” и “двоичном” режиме. В двоичном режиме файл при выполнении ввода-вывода не подвергается никаким преобразованиям. При выводе данных в двоичный дескриптор файла запись этих данных выполняется в таком виде, в каком они были заданы. Аналогичным образом при выполнении операции чтения данные возвращаются точно в таком виде, в каком они хранились в файле.
Однако в текстовом режиме стандартная библиотека ввода-вывода автоматически преобразует символы LF в пары CRLF на выходе, а пары символов CRLF — в символы LF на входе. Преимуществом этого является то, что текстовые операции в версиях интерпретатора Perl для Windows и UNIX с точки зрения программиста выглядят одинаково: строки текстовых файлов DOS оканчиваются одним символом n, так же как и в UNIX. Проблема возникает при чтении или записи двоичных файлов, таких как изображения или индексированные базы данных, и в файлах возникают непонятные искажения при вводе или выводе. Это связано с применяемым по умолчанию преобразованием символов конца строки. Если такое происходит в программе, необходимо отключить преобразование символов, вызвав функцию binmode с указанием в качестве параметра дескриптора файла.
Функция binmode включает двоичный режим для дескриптора файла и отменяет преобразование символов. Она должна быть вызвана после открытия дескриптора файла, но перед выполнением с ним любых операций ввода-вывода. Форма вызова с одним параметром включает двоичный режим. Форма вызова с двумя параметрами, которая предусмотрена только в версии Perl 5.6 или в более высокой версии, позволяет включить двоичный режим, указав значение $discipline равным: raw, или восстановить применяемый по умолчанию текстовый режим, указав значение: crif.
Функция binmode выполняет какие-либо действия только в таких системах, как Windows и VMS, где обозначение конца строки состоит более чем из одного символа. В системах UNIX и Macintosh она не выполняет никаких действий.
Еще один способ исключения путаницы между текстовым и двоичным режимами состоит в использовании функций sysread и syswrite, которые обходят процедуры преобразования символов конца строки, предусмотренные в стандартной библиотеке ввода-вывода.
В языке Perl предусмотрен также набор специальных глобальных переменных, которые позволяют уточнить другие характеристики построчного ввода-вывода, например, указать, следует ли добавлять автоматически символ конца строки к данным, им водимым с помощью функций print, и нужно ли отделять друг от друга несколько значений данных разделителем.