Durante la ejecución del programa, siempre encontrarás varios errores, como abrir un archivo que no existe.
Si ocurre un error durante la ejecución del programa, se detendrá. Necesitamos utilizar algunos métodos de detección para evitar errores y evitar que el programa se cierre.
Perl proporciona múltiples métodos para manejar errores y los presentaremos uno por uno a continuación.
La declaración if puede determinar el valor de retorno de la declaración. Los ejemplos son los siguientes:
if(open(DATA, $file)){ ...}else{ die "Error: No se puede abrir el archivo - $!";}
La variable $! en el programa devolvió un mensaje de error. También podemos simplificar el código anterior al siguiente código:
open(DATA, $file) || die "Error: No se puede abrir el archivo - $!";
La función a menos que sea lo opuesto a if y solo se ejecutará cuando la expresión devuelva falso, como se muestra a continuación:
a menos que(chdir("/etc")){ die "Error: No se puede abrir el directorio - $!";}
La declaración a menos que sea muy útil cuando desea configurar un recordatorio de error. También podemos abreviar el código anterior como:
die "Error: ¡No se puede abrir el directorio!: $!" a menos que(chdir("/etc"));
El mensaje de error anterior solo aparecerá cuando haya un error en el cambio de directorio.
El siguiente es un ejemplo sencillo del operador ternario:
print(existe($hash{valor}) ? 'Existe' : 'No existe',"n");
En el ejemplo anterior, utilizamos el operador ternario para determinar si existe el valor hash.
El ejemplo contiene una expresión con dos valores, en el formato: ¿expresión? valor uno: valor dos .
La función de advertencia se utiliza para activar un mensaje de advertencia. No se realizarán otras operaciones. Se envía a STDERR (archivo de salida estándar). Generalmente se usa para solicitar al usuario:
chdir('/etc') o advertir "No se pueden cambiar de directorio";
La función del dado es similar a advertir, pero sale. Generalmente utilizado como salida de mensajes de error:
chdir('/etc') o die "No se puede cambiar de directorio";
En los scripts Perl, una forma común de informar errores es utilizar las funciones warn() o die() para informar o generar errores. Para el módulo Carp, puede proporcionar un nivel adicional de control sobre los mensajes generados, especialmente dentro del módulo.
El módulo Carp estándar proporciona alternativas a las funciones warn() y die() que son más informativas y fáciles de usar al proporcionar localización de errores. Cuando se utiliza dentro de un módulo, el nombre del módulo y el número de línea se incluyen en el mensaje de error.
La función carp puede generar información de seguimiento del programa, similar a la función de advertencia, y generalmente envía esta información a STDERR:
paquete T;require Exporter;@ISA = qw/Exporter/;@EXPORT = qw/function/;use Carp;sub function { carp "¡Error en el módulo!";}1;
Llame al siguiente programa en el script:
utilizar T;función();
Al ejecutar el programa anterior, el resultado de salida es:
¡Error en el módulo en test.pl línea 4!
cluck() es similar a warn() y proporciona un rastreo de la pila desde donde ocurrió el error.
paquete T;requerir Exportador;@ISA = qw/Exportador/;@EXPORT = qw/función/;use Carp qw(cluck);sub function { cluck "¡Error en el módulo!";}1;
Llame al siguiente programa en el script:
utilizar T;función();
Al ejecutar el programa anterior, el resultado de salida es:
¡Error en el módulo en T.pm línea 9 T::function() llamado en test.pl línea 4
croak(), como die(), finaliza el script.
paquete T;require Exporter;@ISA = qw/Exporter/;@EXPORT = qw/function/;use Carp;sub function { croak "¡Error en el módulo!";}1;
Llame al siguiente programa en el script:
utilizar T;función();
Al ejecutar el programa anterior, el resultado de salida es:
¡Error en el módulo en test.pl línea 4!
confesar() es similar a morir(), pero proporciona un rastreo de la pila desde donde ocurrió el error.
paquete T;require Exporter;@ISA = qw/Exporter/;@EXPORT = qw/function/;use Carp;sub function { confesar "¡Error en el módulo!";}1;
Llame al siguiente programa en el script:
utilizar T;función();
Al ejecutar el programa anterior, el resultado de salida es:
¡Error en el módulo en T.pm línea 9 T::function() llamado en test.pl línea 4