• Publicidad

Problema con el orden de OR y AND

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Problema con el orden de OR y AND

Notapor Peich69 » 2016-11-30 08:04 @378

Hola.

Me he hecho una función que envía correos. La voy a utilizar para que en caso de que suceda un error en un script me envíe un correo indicándomelo. La función send_mail funciona correctamente.

Mi intención es que si hay un error de lectura/escritura me envíe un correo antes de que muera.

La línea en cuestión es:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. open (CSV, $archivo) || &send_mail("Open_fail","Couldn't read $archivo.csv: $!") and die;
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4

El archivo existe, pero ni lo lee ni envía el correo, simplemente muere.

Según creo haber entendido, el problema está en que perl evalúa primero los and y luego los or.

No se me ocurre la manera de añadirle la orden de die después de enviar el correo sin poner un and.

No puedo (más bien no quiero) acabar la función send_mail con un die porque esta función no sólo la uso para errores que deben detener el script, sino que también me informará de errores “tolerables”.

Digo que no quiero porque, aunque la solución más fácil sería crear dos funciones send_mail, una con die y la otra sin, llevo un rato intentándolo y no lo consigo, y me come la curiosidad.

¿Qué se os ocurre?

Gracias.
Peich69
Perlero nuevo
Perlero nuevo
 
Mensajes: 18
Registrado: 2013-03-19 08:49 @409

Publicidad

Re: Problema con el orden de OR y AND

Notapor Peich69 » 2016-11-30 08:19 @388

Con un if me funciona
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. if(!open (FHANDLE, "$file_name"))
  2.         {
  3.                 &send_mail("Open_fail","Couldn't read $file_name: $!");
  4.                 die;
  5.         }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Me vale, pero sigue sin solucionarme la duda.
Peich69
Perlero nuevo
Perlero nuevo
 
Mensajes: 18
Registrado: 2013-03-19 08:49 @409

Re: Problema con el orden de OR y AND

Notapor explorer » 2016-11-30 16:43 @738

Prueba con el 'or':
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.     open (CSV, $archivo) or &send_mail("Open_fail","Couldn't read $archivo.csv: $!") and die;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

;)
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Problema con el orden de OR y AND

Notapor Peich69 » 2016-12-01 13:26 @601

Vale, ya lo he entendido. Es un problema de "precedence" (precedencia me suena fatal :D)
Estas dos líneas hacen lo que yo esperaba que hiciesen:

open (CSV, $archivo) or &send_mail("Open_fail","Couldn't read $archivo.csv: $!") and die;
open (CSV, $archivo) || (&send_mail("Open_fail","Couldn't read $archivo.csv: $!") and die);

La que yo había escrito
open (CSV, $archivo) || &send_mail("Open_fail","Couldn't read $archivo.csv: $!") and die;

En realidad estaba siendo interpretada como
(open (CSV, $archivo) || &send_mail("Open_fail","Couldn't read $archivo.csv: $!")) and die;

Por eso si el open funcionaba, abría el archivo y después moría.

Gracias.
Peich69
Perlero nuevo
Perlero nuevo
 
Mensajes: 18
Registrado: 2013-03-19 08:49 @409


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 5 invitados