I think that Data::Swap does exactly this. The Swap.xs
file, once stripped of all checks, looks like:
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
MODULE = Data::Swap PACKAGE = Data::Swap
void swap(foo, bar)
SVref foo
SVref bar
PREINIT:
void *any;
U32 flags;
CODE:
any = foo->sv_any;
flags = foo->sv_flags;
foo->sv_any = bar->sv_any;
foo->sv_flags = bar->sv_flags;
bar->sv_any = any;
bar->sv_flags = flags;
But for this you need to translate the .xs into a .c,
compile the latter and place the resulting shared
object in blib somewhere in the hierarchy. And you
need also a Swap.pm module bootstrapping it.
I would like to avoid to ask people to install this
module to run my code. Is it possible to hide these
files in my user hierarchy?
I begin to believe that there is no native way to solve
my original problem in Perl5. |