Как отличить каналы от простых дескрипторов файлов, когда возникает необходимость проверить дескриптор файла, чтобы узнать, открыт ли он в файл или в канал. Это можно сделать с помощью средств проверки дескриптора файла языка Perl. Если дескриптор файла открыт в канал, опция проверки -р возвращает истинное значение.
Опции проверки -t и -S позволяют определить дескрипторы файлов других специальных типов. Если дескриптор файла открыт в терминал (в окно интерпретатора командной строки), То опция проверки -t возвращает истинное значение. В программах можно использовать это средство проверки с дескриптором файла STDIN для определения того, выполняется ли Программа в интерактивном режиме или ее стандартный ввод перенаправлен из файла. Опция проверки -S позволяет определить, открыт ли дескриптор файла в сетевой сокет.
Есть еще более десятка других опций проверки файла, которые позволяют определить размер файла, дату последнего изменения, владельца и другую информацию. Дополнительные сведения представлены в документе perlfunc POD.
Но существует серьезная ошибка PIPE. При чтении в сценарий данных из дескриптора файла, открытого в канал, программа на другом конце канала может завершить свою работу или просто закрыть свой конец канала. В этом случае программа получает данные, которые указывают на возникновение условия EOF в дескрипторе файла. А что происходит, когда свою работу или закрывает свой конец соединения?
Для изучения такой ситуации нужно рассмотреть разные сценарии Perl. Один из них, открывает канал во вторую программу и пытается записать в него десять строк текста. В сценарии выполняется проверка кода результата, полученного от функции print(), и увеличение значения переменной $count при получении от функции print() истинного значения.