Si se asigna la cadena ' IGNORE ' a la correspondiente entrada $SIG{KINDOFSIGNAL}
Perl descartará la señal. Algunas señales no pueden ser ignoradas (por ejemplo,
KILL y STOP ). Cuando cambie el manejador de una señal recuerde
usar local para asegurar
que el anterior manejador será restaurado una vez terminado el ámbito.
pp2@nereida:~/src/perl/perl_networking/ch2$ cat -n write_ten_i.pl
1 #!/usr/bin/perl -w
2 use strict;
3
4 local $SIG{PIPE} = 'IGNORE';
5
6 open (PIPE,"| ./read_three.pl") or die "Can't open pipe: $!";
7 select PIPE; $|=1; select STDOUT;
8
9 my $count=0;
10 for (1..10) {
11 warn "Writing line $_\n";
12 unless (print PIPE "This is line number $_\n") {
13 warn "An error occurred during writing: $!\n";
14 $count = $_-1;
15 last;
16 }
17 sleep 1;
18 }
19 close PIPE or die "Can't close pipe: $!";
20
21 print "Wrote $count lines of text\n";
En la línea 12 se hace uso de la propiedad de print
de devolver 1 si la impresión se realizó con éxito.
Al ejecutar obtenemos:
lhp@nereida:~/Lperl/src/perl_networking/ch2$ ./write_ten_i.pl Writing line 1 Read_three got: This is line number 1 Writing line 2 Read_three got: This is line number 2 Writing line 3 Read_three got: This is line number 3 Writing line 4 An error occurred during writing: Tubería rota Wrote 3 lines of textNótese como el mensaje de la línea 13 produce el volcado de la variable
$! en español.
Nótese también que no se produce error en el close PIPE.
Para mas información sobre las señales
véase perldoc perlipc.
Casiano Rodríguez León
