void strIter(SV* code, SV* string) { dSP; STRLEN i; char* src = SvPV(string, i); char* dst; SV* c; c = newSVpvn(" ", 1); dst = SvPVX(c); SAVE_DEFSV; DEFSV_set(c); while (i--) { *dst = *(src++); PUSHMARK(SP); call_sv(code, G_NOARGS | G_VOID | G_DISCARD); } }