$ cat a.pl use strict; use warnings; use Inline C => <<'__EOI__', PREFIX => 'M_'; #include typedef struct { int i; int j; } foo_t; foo_t* M_get() { foo_t* foo = (foo_t*)malloc(sizeof(foo_t)); printf("get: %p\n", foo); return foo; } void M_free(foo_t* foo) { printf("free(%p)\n", foo); free(foo); } __EOI__ my $o = get(); free($o); $ cat typemap TYPEMAP foo_t* T_PTRREF $ perl -MInline=FORCE,NOISY,NOCLEAN a.pl ... get: 0x91ab70 free(0x91ab70)