Estoy escribiendo un módulo Perl, y estoy usando carp para devolver una advertencia no fatal al programa de llamada.¿Cómo puedo capturar la salida de una carpa en Perl?
La advertencia de carpa funciona bien - Estoy comprobando si un parámetro de entrada cumple una determinada condición - si no cumple con la condición, se envía una advertencia con carpa y el módulo continúa usando un valor predeterminado para el parámetro en lugar del uno que pasó el programa de llamadas. La advertencia es solo para notificar que se está utilizando un parámetro predeterminado en lugar del parámetro pasado.
Mi problema es con mi script de prueba. Mi script de prueba está enviando un parámetro incorrecto al módulo, y estoy tratando de captar el mensaje de advertencia que aparece y asegurarme de que recibí el mensaje de advertencia correcto.
Mi módulo es como la siguiente:
else {
carp "value must be numeric - using default value";
}
y mi escritura de la prueba es el siguiente:
eval {
#call to my module
};
like (
[email protected],
qr/value must be numeric/,
"Should abort on non-numeric value"
);
Cuando ejecuto la prueba, puedo ver el aviso (hay que va a STDERR) en la pantalla, pero el contenido de la variable $ @ está '' - en blanco.
Aquí está la salida de mi escritura de la prueba:
t/04bad_method_calls....ok 10/12value must be numeric - using default value at ...
# Failed test 'Should abort on non-numeric value'
# at t/04bad_method_calls.t line 98.
t/04bad_method_calls....NOK 12
# '' doesn't match '(?-xism:value must be numeric)'
# Looks like you failed 1 test of 12.
Si cambio de la carpa a un graznido, mi script de prueba funciona - capta el mensaje de error (pero sólo quiero advertir, sin renunciar) .
Para ser sincero, no tengo la mejor comprensión de eval - tal vez esa no sea la mejor manera de captar la salida de advertencia de la carpa. Intenté usar $ SIG {WARN}, pero eso también estaba vacío.
¿Hay alguna forma de capturar la salida de la carpa? No es el mejor negocio, ya que es solo en mi script de prueba, pero aún me gustaría que mi script de prueba funcione correctamente.
¡Gracias de antemano!
Sí, ese fue el truco! Estaba malinterpretando lo que era $ SIG {__ WARN__}. Esto funciona perfectamente, ¡muchas gracias! – BrianH