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 errorVeamos 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
Casiano Rodríguez León