http://www.perlmonks.org?node_id=995418


in reply to XS DESTROY not invoked

If your are using C++ ignore half of what I said below.
MODULE = OpenCA::OpenSSL PACKAGE = OpenCA::OpenSSL::CRL OpenCA_OpenSSL_CRL _new_from_der(SV * sv)
That is not valid XS code (maybe it now is in 2012), the types (SV *) go on the next inline in an explicity or implicity INPUT: section. Also _new_from_der will be called OpenCA::OpenSSL::CRL::_new_from_der in Perl. You also didn't show the body of _new_from_der so who knows if that works.
MODULE = OpenCA::OpenSSL PACKAGE = OpenCA::OpenSSL::CRL +Ptr PREFIX = some_
MODULE = OpenCA::OpenSSL PACKAGE = OpenCA::OpenSSL::CRL
2 different packages. Do a
use Data::Dumper; use OpenCA::YourModule; print Dumper(\%OpenCA::OpenSSL::CRL::);
to see what subs actually were registered in what packages. You can also look at end of the .c file generated during the compiling process for the "XS_EXTERNAL(boot_RootName__SecondName)" function and look at the newXS()s yourself. Also get very familiar with a step through C debugger and having your C compiler generate debugging symbols. You also will probably want to compile an -Od DEBUGGING perl for yourself too.

edit:code sample fixed