void strIter(SV* code, SV* string) { dSP; STRLEN i; char* src = SvPV(string, i); SV* c; c = newSV_type(SVt_PV); SvCUR(c) = 1; SvLEN(c) = 0; SvPOK_only(c); SAVE_DEFSV; DEFSV_set(c); while (i--) { SvPVX(c) = src++; PUSHMARK(SP); call_sv(code, G_NOARGS | G_VOID | G_DISCARD); } }