2010-08-29 12 views
5

Estoy escribiendo una secuencia de comandos perl, y en la parte en la que estoy verificando las opciones que el usuario suministró en la línea de comandos, quiero salir con un error explicando qué problema tenían las opciones. En este caso, no hay necesidad de que un seguimiento de la pila vaya junto con este mensaje de error. Entonces, ¿cuál es la mejor manera de morir con un mensaje de error pero sin seguimiento de pila o información de depuración?¿Cuál es la forma correcta de morir con un error pero sin un rastro de pila en Perl?

He intentado lo siguiente:

die "Invalid options"; 

que produce

Invalid options at myscript.pl line 49. 

Entonces, traté

use Carp; 
... 
croak "Invalid options"; 

que produce

Invalid options at myscript.pl line 47 
    main::prepare_output_directory() called at myscript.pl line 546 

Entonces, ¿cómo puedo morir con Invalid options y nada más?

Pregunta de bonificación: ¿por qué croak me dice que el error está en la línea 47, cuando la llamada real a croak está en la línea 49?

+1

re: pregunta extra, ¿muestra más contexto para su croak? – ysth

+0

No importa en la pregunta extra. Me preguntaba si podría haber alguna razón general. –

+0

Para su pregunta de bonificación: 'croak' intenta informar el número de línea desde la perspectiva de la persona que llama. Lea los documentos para el módulo [Carp] (http://perldoc.perl.org/Carp.html). –

Respuesta

18

sólo hay que poner una nueva línea al final de la cadena die:

die "Invalid options\n"; 

que evitará la ubicación del error de ser adjunta a su mensaje.

+20

Supongo que leen la documentación. [perldoc -f die] (http://perldoc.perl.org/functions/die.html) –

+1

Ojalá hubiera una manera de hacer lo mismo con 'croak'. Mi entendimiento es que semánticamente, 'die' es para errores internos, mientras que' croak' es para errores causados ​​por algo externo. En este caso, quiero indicar que el usuario ingresó opciones inválidas, lo cual es claramente un caso de este último. Sin embargo, tengo que morir en lugar de croar para reprimir la traza inversa. –

Cuestiones relacionadas