Рассмотрим пример практически применимой программы, которая открывает канал в команду who UNIX и подсчитывает, сколько раз регистрировался каждый пользователь. Она вырабатывает примерно общий отчет. Сценарий такого рода может применяться администратором загруженной системы для контроля над ее использованием.
Функции open() и close() были немного доработаны с учетом их применения с каналами они предоставляют дополнительную информацию о вызываемом подпроцессе. При открытии канала функция open() возвращает идентификатор процесса PID команды, выполняемой на другом конце канала. Это - уникальное ненулевое целое число, которое может применяться для управления подпроцессом с помощью сигналов. В программе можно сохранить этот идентификатор процесса переменной или игнорировать его особый смысл и рассматривать значение, возвращаемое функцией open(), как логический флажок.
При использовании функции close() для закрытия канала применяются ее дополнительные возможности, которые предусматривают размещение кода завершения подпроцесса в специальной глобальной переменной $?. В отличие от обычно применяемого соглашения Perl, переменная $? принимает нулевое значение в случае успешного выполнения команды и ненулевое - в случае возникновения ошибки. В документе perlvar POD приведена дополнительная информация о кодах завершения.
Еще одной особенностью применения функции close() является то, что при закрытии канала записи вызов этой функции блокируется до тех пор, пока процесс на кругом конце канала не закончит всю свою работу и не завершится. При закрытии какала чтения до возникновения условия конца файла EOF, программа на другом конце канала получит сигнал PIPE (об этом дальше) при следующей попытке записи на стандартное устройство вывода.