next up previous contents index practicapracticaPP2moodleLHPmoodlepserratacpanmodulospauseperlgoogleetsiiullpcgull
Sig: Controlando warnings en tiempo Sup: Señales Ant: Captura de señales Err: Si hallas una errata ...


Controlando errores en tiempo de ejecución con eval

La función eval recibe habitualmente una cadena como argumento, evaluándola como si de un programa Perl se tratara. Sin embargo, eval admite una segunda forma en la puede ser utilizado para manejar errores en tiempo de ejecución. en esta segunda forma recibe como argumento un bloque de código.

En el siguiente ejemplo atrapamos una excepción de división por cero:

> cat eval_excep.pl
#!/usr/bin/perl -w

use strict;

eval {
  my ($a, $b) = (10, 0);
  my $c = $a / $b;
};

print "Ocurrió un error: $@" if $@; # mensaje de error
Veamos el resultado de la ejecución:
> eval_excep.pl
Ocurrió un error: Illegal division by zero at eval_excep.pl line 7.

Para señalar los errores en nuestros programas usaremos die. Cuando die es ejecutado dentro de un eval el intérprete Perl deja la cadena de error en la variable $@ y sale del bloque. Veamos un ejemplo:

> cat eval_die.pl
#!/usr/bin/perl -w

use strict;

sub open_file {
  my $fn = shift;
  open (F, $fn) or die("No se pudo abrir el fichero $fn: $!\n");
}

my $fn = shift;
while (1) {
  eval { open_file($fn); };
  if ($@) { print "En main: $@\n"; }
  else { last; }
  print "Entre el nombre del fichero: ";
  chomp ($fn = <STDIN>);
}

while (<F>) { print; }
Veamos el resultado de una ejecución:
> eval_die.pl xx.pl
En main: No se pudo abrir el fichero xx.pl: No such file or directory

Entre el nombre del fichero: one.dat
1
2
3
0
4
0


next up previous contents index practicapracticaPP2moodleLHPmoodlepserratacpanmodulospauseperlgoogleetsiiullpcgull
Sig: Controlando warnings en tiempo Sup: Señales Ant: Captura de señales Err: Si hallas una errata ...
Casiano Rodríguez León
2006-02-21