struct bar* create_event(foo_sv) SV* foo_sv struct type_foo* foo = NULL; CODE: if ( SvROK(foo_sv)) { SV *tmp = (SV*) SvRV(foo_sv); if ( SvOK (tmp)) { foo = (struct type_foo*) SvIV(tmp); } } else { warn( "Foo::create_bar() -- foo is not an SV reference" ); XSRETURN_UNDEF; } RETVAL = my_c_create_bar(foo); OUTPUT: RETVAL