2010-01-07 12 views
27

Tengo un script que arroja una excepción a través del die. Cuando detecto la excepción, quiero enviar el mensaje sin adjuntar la información de ubicación.¿Cómo puedo generar un mensaje de morir() sin la información de ubicación?

Este script:

#! /usr/bin/perl -w 

use strict; 

eval { 
    die "My error message"; 
}; 
if([email protected]) { 
    print [email protected]; 
} 

salidas My error message at d:\src\test.pl line 7.

yo preferiría simplemente para obtener la salida: My error message

Espero que la gente no se centran en por qué quiero hacerlo, pero si alguien está interesado, entonces:

La forma en que mi script w orks, busca entradas y envía cada pieza de entrada a un manejador, si se encuentra con una entrada que no puede manejar, arroja, por lo que todas las excepciones provienen de la misma pieza de código. Por lo tanto, la ubicación no es terriblemente útil en esta situación.

Respuesta

43

Añadir \n a la cadena:

die "My error message\n" 

Esto está documentado en die:

Si el último elemento de la lista no fin en una nueva línea, la corriente número de línea de la escritura y también se imprime el número de línea de entrada (si es cualquiera) y se suministra una nueva línea .

+1

Gracias herramienta. ¡Eso era lo que estaba buscando! – chollida

+4

aprende algo nuevo @ SO cada día. – Erik

+3

¡Qué oscuro! Gracias – Bizmarck

2

Consulte la entrada perlfunc para die para obtener toda la información adicional. Y termine su mensaje con \n.

16

Tengo un capítulo sobre "Manejo de errores" en Mastering Perl que trata sobre esto. Aunque se puede eliminar el archivo y número de línea simplemente poniendo fin a su mensaje con una nueva línea, también puede die con una referencia:

eval { 
    time % 2 ? 
     die { 
      message => q(I died!), 
      level => 'really really serious', 
      } 
     : 
     die "I died as a string!\n"; 
    }; 

if(ref [email protected]) { 
    print "Reference message was [email protected]>{message}\n"; 
    } 
else { 
    print "[email protected]\n"; 
    } 

no tienden a como saltos de línea al final de los mensajes de error, y aunque no he He visto tu código, parece una situación en la que me gustaría agregar información adicional a la excepción para poder rastrear lo que está sucediendo.

También podría considerar usar uno de los muchos módulos de excepción en CPAN.

+4

Gracias por la respuesta Brian. No estaba consciente de poder morir con una referencia. Puedo ver que esto es muy útil. – chollida

Cuestiones relacionadas