SV* new(const char * classname, const char * name, const char * rank, long serial) { Soldier * soldier; SV * obj; SV * obj_ref; New(42, soldier, 1, Soldier); soldier->name = savepv(name); soldier->rank = savepv(rank); soldier->serial = serial; obj = newSViv((IV)soldier); obj_ref = newRV_noinc(obj); sv_bless(obj_ref, gv_stashpv(classname, GV_ADD)); SvREADONLY_on(obj); return obj_ref; // Inline will mortalize. }