В параметре вызова программы может быть указан полный путь к ее выполняемому файлу, например /usr/bin/ls, или может быть предусмотрена возможность поиска этого выполняемого файла с помощью переменной среды PATH.
Если символ канала предшествует имени программы, то дескриптор файла открывается для записи и все, что записано в этот дескриптор файла, отправляется на стандартный вход программы. Если символ канала следует за именем программы, то дескриптор файла открывается для чтения и все, что считано из этого дескриптора файла, поступает со стандартного выхода программы.
Например, в системе UNIX команда ls -l возвращает список файлов, находящихся в текущем каталоге. Передав функции open() параметр “ls -l | можно открыть канал для чтения из этой команды.
open (LSFH, "Is -l |") or die "Can’t open Is -l: $!";
while (my $line = ) {
print "I saw: $linen";
}
close LSFH;
В этом фрагменте кода просто выдается на устройство вывода в неизменном виде каждая строка, полученная при выполнении команды Is -l. В реальном приложении с полученной информацией могут быть выполнены какие-то более важные действия. В качестве примера выходного канала укажем, что команда wc -lw системы UNIX позволяет подсчитать число строк (опция “-l”) и слов (опция “-w”) в текстовом файле, отправленном на стандартный вход. При этом открывается канал в команду, выполняется запись в него нескольких строк текста, а затем канал закрывается. После выполнения программы число слов и строк можно вывести на экран. Модуль IO::Filqhandle обеспечивает поддержку каналов с помощью предусмотренного в нем метода open().