int callComp( SV* cmp, SV *a, SV *b) { int count, rv; GV *first = gv_fetchpv("a", TRUE, SVt_PV); GV *second = gv_fetchpv("b", TRUE, SVt_PV); dSP; ENTER; SAVETMPS; PUSHMARK(SP); XPUSHs( a ); XPUSHs( b ); PUTBACK; GvSV(first) = a; GvSV(second) = b; if( ( count = call_sv( cmp, G_SCALAR|G_NOARGS) ) != 1 ) croak( "Bad comparator" ); SPAGAIN; rv = POPi; FREETMPS; LEAVE; }