#include "EXTERN.h" #include "perl.h" #include "XSUB.h" #include "ppport.h" #include #include "const-c.inc" MODULE = AddrMatch PACKAGE = AddrMatch INCLUDE: const-xs.inc AddrMatch * new_xs(class, stash) char * class HV * stash PREINIT: AddrMatch *amd; CODE: amd = malloc(sizeof(AddrMatch)); SvREFCNT_inc((SV *) stash); amd->stash = stash; RETVAL = amd; OUTPUT: RETVAL MODULE = AddrMatch PACKAGE = AddrMatchPtr void DESTROY(amd) AddrMatch * amd CODE: SvREFCNT_dec((SV *)(amd->stash)); free(amd); HV * stash(amd) AddrMatch * amd CODE: RETVAL = amd->stash; OUTPUT: RETVAL #### package AddrMatch; sub new { my %state = ( what => "ever" ); my $amd = AddrMatch->xs_new(\%state); return $amd; } # then, later, recover the perl-ish state with package AddrMatchPtr; sub something { my $self = shift; my $state = $self->stash(); my $what = $state->{what}; $state{how} = "now"; }