He escrito una envoltura Perl XS para una biblioteca C que consta de aproximadamente ~ 80 funciones. En este momento, mi estrategia general es sustituir el error de una función C con PL_sv_undef
y el código Perl llamante debe verificar explícitamente si el resultado no es undef
. (Para algunas funciones de C es más complicado como puedo convertir su producción en un HV
/AV
y utilizo lista vacía para informar del error.)¿Cómo puede morir el XSUB de Perl?
Ahora mientras me movía a escribir más grandes scripts de Perl usando esa biblioteca, quiero simplifica el manejo y uso de errores, por ejemplo el mecanismo eval {}
/die
de excepción como mecanismo para manejar errores.
En el momento en que un XSUB simple en mis XS ven así:
SV *
simple_function(param1, param2 = 0, param3 = 0)
int param1
int param2
int param3
CODE:
int rc;
rc = simple_function(param1, param2, param3);
RETVAL = (rc == 0) ? &PL_sv_yes : &PL_sv_undef;
OUTPUT:
RETVAL
he visto que algunos módulos tienen indicador global como "RaiseError" a die
en errores, pero no pudieron encontrar ningún ejemplo que pueda prestar de. Los pocos módulos que tengo encontraron manejar el indicador "RaiseError" dentro de .pm
, no dentro de .xs
, y permitieron así usar el die
de Perl. En mi caso, es bastante difícil de implementar en dentro del .pm
, ya que muchas funciones requieren verificaciones de error especiales. Eso también conduciría a la duplicación de código ya que las comprobaciones ya están presentes dentro del XS.
La información de perlxs
/perlguts
no encontró ninguna traducción pertinente. En particular, he visto llamadas a Perl_croak()
en el .c
generadas desde mi .xs
, pero no he podido encontrar ninguna documentación para la función.
¿Cuál es el análogo XS del Perl's die
? ¿O cómo puede el XSUB informar al Perl en tiempo de ejecución que la función ha fallado y que no hay ningún RETAL? Cómo configurar correctamente el [email protected]
?
Una sola pregunta. ¿Por qué * morir * y no * morir *? ¿O era otro ingenio de Larry? – Dummy00001
No, [Zefram] (http://search.cpan.org/~zefram) 's. Es un uso [hackish] (http://catb.org/jargon/html/writing-style.html) porque se deriva de la palabra clave 'die'. – daxim