$result = pipe(READHANDLE,WRITEHANDLE)Se utiliza con fork. En el ejemplo el proceso padre usa el de lectura y los procesos hijos comparten el de escritura. El siguiente ejemplo esta tomado del libro de Stein [5]:
lhp@nereida:~/Lperl/src/perl_networking/ch2$ cat -n facfib.pl 1 #!/usr/bin/perl 2 # file: facfib.pl 3 # Figure 2.2: Using pipe() to create linked filehandles 4 5 use strict; 6 my $arg = shift || 10; 7 8 pipe(READER,WRITER) or die "Can't open pipe: $!\n"; 9 10 if (fork == 0) { # first child writes to WRITER 11 close READER; 12 select WRITER; $| = 1; 13 factorial($arg); 14 exit 0; 15 } 16 17 if (fork == 0) { # second child writes to WRITER 18 close READER; 19 select WRITER; $| = 1; 20 my $result = fibonacci($arg); 21 exit 0; 22 } 23 24 # parent process closes WRITER and reads from READER 25 close WRITER; 26 print while <READER>; 27 28 sub factorial { 29 my $target = shift; 30 for (my $result = 1,my $i = 1; $i <= $target; $i++) { 31 print "factorial($i) => ",$result *= $i,"\n"; 32 } 33 } 34 35 sub fibonacci { 36 my $target = shift; 37 for (my $result = 1,my $i = 1; $i <= $target; $i++) { 38 print "fibonacci($i) => ",$result += $i,"\n"; 39 } 40 }Al ejecutar se entrelazan las salidas:
lhp@nereida:~/Lperl/src/perl_networking/ch2$ ./facfib.pl 18 factorial(1) => 1 factorial(2) => 2 factorial(3) => 6 factorial(4) => 24 factorial(5) => 120 factorial(6) => 720 factorial(7) => 5040 factorial(8) => 40320 factorial(9) => 362880 factorial(10) => 3628800 factorial(11) => 39916800 factorial(12) => 479001600 factorial(13) => 6227020800 factorial(14) => 87178291200 factorial(15) => 1307674368000 fibonacci(1) => 2 factorial(16) => 20922789888000 fibonacci(2) => 4 fibonacci(3) => 7 factorial(17) => 355687428096000 fibonacci(4) => 11 fibonacci(5) => 16 factorial(18) => 6.402373705728e+15 fibonacci(6) => 22 fibonacci(7) => 29 fibonacci(8) => 37 fibonacci(9) => 46 fibonacci(10) => 56 fibonacci(11) => 67 fibonacci(12) => 79 fibonacci(13) => 92 fibonacci(14) => 106 fibonacci(15) => 121 fibonacci(16) => 137 fibonacci(17) => 154 fibonacci(18) => 172 lhp@nereida:~/Lperl/src/perl_networking/ch2$