Более мощный и в то же время более сложный способ создания канала состоит в использовании встроенной функции pipe() языка Perl. Эта функция создает два дескриптора файлов: для чтения и для записи. Все, что будет записано в один дескриптор файла, может быть считано из другого.
$result = pipe(READHANDLE ,TWRITEHANDLE);
Открыть пару дескрипторов файлов, соединенных каналом. Первым параметром является имя дескриптора файла, из которого должно выполняться чтение, а вторым — дескриптор файла, в который должна выполняться запись. В случае успешного выполнения функция pipe() возвращает истинный код результата.
Обычно функция pipe() применяется вместе с функцией fork() для создания родительско-дочерней пары, способной обмениваться данными. Родительский процесс оставляет для себя один дескриптор файла и закрывает другой, а дочерний процесс выполняет противоположные действия. После этого родительский и дочерний процессы могут обмениваться информацией по каналу в ходе параллельной работы.
Возможности этого метода можно рассмотреть на примере. При получении положительного целого числа сценарий вычисляет его факториал и определяет его положение в ряде Фибоначчи. Чтобы можно было воспользоваться преимуществами современных мультипроцессорных компьютеров, эти вычисления выполняются в виде двух подпроцессов, что позволяет проводить оба расчета параллельно. В сценарии используется функция pipe() для создания дескрипторов файлов, которые могут применяться дочерними процессами для передачи результатов выполненных вычислений запустившему их родительскому процессу.