Página 1 de 1

Problema con el orden de OR y AND

NotaPublicado: 2016-11-30 08:04 @378
por Peich69
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.002 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.

Re: Problema con el orden de OR y AND

NotaPublicado: 2016-11-30 08:19 @388
por Peich69
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.001 segundos, usando GeSHi 1.0.8.4


Me vale, pero sigue sin solucionarme la duda.

Re: Problema con el orden de OR y AND

NotaPublicado: 2016-11-30 16:43 @738
por explorer
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

;)

Re: Problema con el orden de OR y AND

NotaPublicado: 2016-12-01 13:26 @601
por Peich69
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.