Limitando el Tiempo de Lectura

El siguiente ejemplo utiliza eval junto con las señales para establecer un límite al tiempo de espera en una lectura:

lhp@nereida:~/Lperl/src$ cat -n eval_alarm.pl
 1  #!/usr/bin/perl -w
 2  use strict;
 3
 4  sub time_out {
 5    die "Cansados de esperar";
 6  }
 7
 8  my $lim = (shift or 1);
 9  my $buf = "";
10
11  local $SIG{ALRM} = "time_out";
12  print "Write your input: ";
13  eval {
14    alarm($lim); # Le indica al SO enviar una señal de ALRM cada $lim s.
15    $buf = <>;
16    alarm(0); # Cancela la alarma
17  };
18  print "\n";
19  print "Error \$\@ is: $@" if $@;
20  print "Buffer has: <$buf>\n";
Ejemplo de ejecución:
lhp@nereida:~/Lperl/src$ eval_alarm.pl
Write your input:
Error $@ is: Cansados de esperar at ./eval_alarm.pl line 5.
Buffer has: <>
lhp@nereida:~/Lperl/src$ eval_alarm.pl 10
Write your input: my input

Buffer has: <my input
>
lhp@nereida:~/Lperl/src$

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