Создание первого дочернего процесса. Для получения копии текущего процесса вызывается функция fork(). В родительском процессе функция fork() возвращает ненулевой идентификатор дочернего процесса, в дочернем - числовое значение 0. Если будет обнаружено, что результат выполнения функции fork() равен 0, значит, данный процесс является дочерним. В этом процессе закрывается дескриптор файла reader, поскольку он не нужен. Вызывается функция select() с параметром writer, в результате чего этот дескриптор файла становится применяемым по умолчанию для вывода, и включается режим автоматического сброса путем установки переменной равной истинному значению. Это необходимо для того, чтобы родительский процесс получал сообщения из дочернего процесса сразу после их записи.
Теперь вызывается подпрограмма factorial() с целочисленным параметром, полученным из командной строки. После этого дочерний процесс оканчивает свою работу, поэтому вызывается функция exit(). Копия дескриптора файла writer, принадлежащая дочернему процессу, закрывается автоматически.
Создание второго дочернего процесса. В родительском процессе снова вызывается функция fork() для создания второго дочернего процесса. Однако этот дочерний процесс вызывает подпрограмму fibonacci(), а не factorial().
Создание связанных каналов. Связанные каналы создаются с помощью функции pipe(). Дескриптор файла reader будет применяться главным (родительским) процессом для чтения результатов, полученных от дочерних процессов, которые будут выполнять запись результатов с помощью дескриптора файла.
Обработка сообщений, полученных от дочерних процессов. В родительском процессе закрывается дескриптор файла writer, поскольку он больше не нужен. Выполняется построчное чтение из дескриптора файла reader и вывод результатов на устройство вывода. Эти результаты содержат строки, возвращенные обоими дочерними процессами. Дескриптор файла reader возвращает значение undef, после того как последний дочерний процесс закончит свою работу и закроет дескриптор файла writer, отправляя код условия EOF. После этого можно закрыть дескриптор файла reader с помощью функции close() и проверить код результата или позволить интерпретатору Perl закрыть дескриптор файла при выходе из программы.