El Manejador IGNORE

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 text
Nó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
Licencia de Creative Commons
Programación Distribuida y Mejora del Rendimiento
por Casiano Rodríguez León is licensed under a Creative Commons Reconocimiento 3.0 Unported License.

Permissions beyond the scope of this license may be available at http://campusvirtual.ull.es/ocw/course/view.php?id=44.
2012-06-19