J'écris un module Perl, et j'utilise la carpe pour renvoyer un avertissement non-fatal au programme appelant. L'avertissement de carpe fonctionne bien - je vérifie si un paramètre d'entrée remplit certaines conditions - s'il ne répond pas à la condition, un avertissement est envoyé avec carpe et le module continue en utilisant une valeur par défaut pour le paramètre au lieu de la un programme d'appel est passé. L'avertissement est juste pour notifier qu'un paramètre par défaut est utilisé à la place du paramètre passé.Comment puis-je attraper la sortie d'une carpe en Perl?
Mon problème est avec mon script de test. Mon script de test envoie un mauvais paramètre au module, et j'essaie d'attraper le message d'avertissement qui revient et de m'assurer que j'ai reçu le bon message d'avertissement.
Mon Module ressemble à ceci:
else {
carp "value must be numeric - using default value";
}
et mon script de test ressemble à ceci:
eval {
#call to my module
};
like (
[email protected],
qr/value must be numeric/,
"Should abort on non-numeric value"
);
Quand je lance le test, je peux voir l'avertissement (il doit être va STDERR) sur l'écran, mais le contenu de la variable $ @ est '' - vide.
Voici la sortie de mon script de test:
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 je change la carpe à un croassement, mon script de test fonctionne - il attrape le message d'erreur (mais je veux seulement avertir, pas avorter) .
Pour être honnête, je n'ai pas la meilleure compréhension d'eval - peut-être que ce n'est pas la meilleure façon d'attraper le signal d'alarme de la carpe. J'ai essayé d'utiliser $ SIG {WARN}, mais c'était vide aussi.
Y at-il un moyen de capturer la sortie de la carpe? Ce n'est pas la plus grosse affaire puisque c'est juste dans mon script de test, mais j'aimerais quand même que mon script de test fonctionne correctement.
Merci d'avance!
Oui, c'était le truc! Je ne comprenais pas ce que $ SIG {__ WARN__} était. Cela fonctionne parfaitement - merci beaucoup! – BrianH