open
para lanzar un proceso en
pipe con el programa actual:
open DATE, "date|" or die "Falló la creación del pipe desde date: $!"; open MAIL, "|mail alu1324@csi.ull.es" or die "Falló el pipe hacia mail: $!";La barra al final indica que la salida del proceso lanzado alimenta la entrada a nuestro programa a través del manipulador. Del mismo modo, la barra al principio indica que la entrada del proceso lanzado se alimenta de las salidas de nuestro programa hacia el correspondiente manipulador. Asi podemos escribir:
my $now = <DATE>;para leer desde el proceso
date
y
print MAIL "Estimado alumno, ha obtenido usted un sobresaliente.\n";Veamos un ejemplo:
$ cat rwho.pl #!/usr/bin/perl -w use strict; my $host = shift; my %who; open(WHOFH, "rsh $host who |") or die "No se pudo abrir who: $!"; while (<WHOFH>) { print $_; } close(WHOFH) or die "error al cerrar: $!";Al ejecutarlo obtenemos la salida:
$ rwho.pl nereida lhp :0 Apr 2 18:19
Al cerrar un filehandle:
close(MAIL); die "mail: salida errónea, $?" if $?;nuestro proceso se sincroniza con el proceso lanzado, esperando a que este termine y obtener el valor de salida, el cual queda almacenado en la variable
$?
.