El manejo de errores en Perl es el proceso de tomar las medidas apropiadas contra un programa que causa dificultad en la ejecución debido a algún error en el código o el compilador. Los procesos son propensos a errores. Por ejemplo, si al abrir un archivo que no existe genera un error, o al acceder a una variable que no ha sido declarada genera un error.
El programa se detendrá si ocurre un error y, por lo tanto, mediante el manejo de errores podemos tomar las medidas adecuadas en lugar de detener el programa por completo. El manejo de errores es un requisito importante para cualquier idioma que sea propenso a errores.
Los errores se pueden clasificar según el momento en que se producen:
- Errores de tiempo de compilación
- Errores de tiempo de ejecución
Error de tiempo de compilación: es un error, como un error de sintaxis o una referencia de archivo faltante, que impide que el programa se compile correctamente.
Error de tiempo de ejecución: es un error que ocurre cuando el programa se está ejecutando y estos errores suelen ser errores lógicos que producen una salida incorrecta.
Manejo de errores en Perl
Perl proporciona dos funciones integradas para generar excepciones fatales y advertencias, que son:
- morir()
- advertir()
die() : para señalar la ocurrencia de errores fatales en el sentido de que no se debe permitir que el programa en cuestión continúe.
Por ejemplo, acceder a un archivo con open()
indica si la operación de apertura se realizó correctamente antes de continuar con otras operaciones de archivo.
open FILE, "filename.txt" or die "Cannot open file: $!\n";
Nota: $! es una variable predefinida que devuelve el mensaje de error devuelto por el sistema en el error.
warn() : a diferencia die()
de la función, warn()
genera una advertencia en lugar de una excepción fatal.
Por ejemplo:
open FILE, "filename.txt" or warn "Cannot open file: $!\n";
Otros métodos que se pueden utilizar para el manejo de errores
- si declaración
- a menos que funcione
- Módulo de error ‘:intentar’
La declaración if: las declaraciones en un bloque de código se ejecutarán solo si la condición se cumple.
perl
if(-e $filename)){ print "File exists"; } else { die "Cannot open the file. $!" }
a menos que la función: las declaraciones en el bloque de código solo se ejecutarán si la expresión devuelve falso.
perl
unless(-e $filename) { die "File Does not Exist! $!"; }
El error ‘:try’: es similar al bloque try and catch del lenguaje de programación Java.
perl
use Error ':try'; try{ open FILE, "filename.txt" or die "File cannot be opened: $!"; while () { # Do something } close FILE; } catch Error::Simple with { my $err = shift; print "ERROR: $err"; };
Error dentro de los módulos
Hasta ahora hemos visto cómo Perl maneja e informa sobre los errores al programador, pero ¿y si hubiera un error en un módulo que necesita ser informado al programador? Dichos errores causarán dificultad en la ejecución de todos aquellos códigos que importen ese módulo en particular.
Por ejemplo, crea un módulo, digamos test.pm , y estamos haciendo un cálculo incorrecto, por lo que aparecerá un mensaje de error como se muestra a continuación:
perl
package test; sub functionName { warn "Error in module!" } 1;
use test; functionName();
Producción:
Error in module! at test.pm line 6
Esta técnica de manejo de errores puede ser utilizada por los programadores para rectificar todos los errores en el módulo. Carp module()
se puede utilizar para proporcionar métodos para informar errores dentro de los módulos.
El módulo de la carpa
Es alternativa a advertir y morir por módulos. Es útil para los módulos definidos por el usuario porque actúan como die()
y warn()
, pero con un mensaje que agrega el programador.
Este módulo Carp proporciona algunas funciones que son:
- carpa()
- cloqueo()
- croar()
- confesar()
Función carp(): esta función funciona de manera similar a la función de advertencia e imprime el mensaje dado por el usuario sin salir del script.
Ejemplo:
perl
package test; use Carp; sub functionName { carp "Error in module!" } 1;
use test; functionName();
Producción:
Error in module! at test.pm line 8
Función cluck(): Esta función produce un contexto que es un resumen de cada llamada en la pila de llamadas. Sigue el mismo proceso que la carp()
función, pero imprime una pila de todos los módulos que llevaron a la llamada a la función específica.
Ejemplo:
perl
package Test; use Carp qw(cluck); sub function_name { cluck "Error in module!"; } 1;
use Test; function_name();
Producción:
Error in module! at Test.pm line 5 Test::function_name() called at test.pl line 2
función croak(): esta función es similar a la die()
función, excepto que produce un mensaje más corto que informa que el error proviene de donde se llamó a su módulo.
Ejemplo:
perl
package Test; use carp; sub functionName { croak "Error in module!"; } 1;
use Test; functionName();
Producción:
Error in module! at test.pl line 2
función confess(): Esta función es similar a la cluck()
función. Llama a la función die y luego imprime una pila de todos los módulos que llevaron a la llamada a la función específica.
Ejemplo:
perl
package Test; use Carp; sub functionName { confess "Error in module!"; } 1;
use Test; functionName();
Producción:
Error in module! at Test.pm line 5 Test::functionName() called at test.pl line 2
Publicación traducida automáticamente
Artículo escrito por rahulbhatt1899 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA