static const char *CoreGlobal = "CORE::GLOBAL"; bool Interpreter::Overwrite(const char *funcname, const char *newfunc) { if(!gv_stashpv(CoreGlobal, 0)) return false; static size_t len_CoreGlobal = strlen(CoreGlobal); size_t len = strlen(funcname); size_t size = len_CoreGlobal + len + 16; char *fullfuncname = new char[size]; strncpy(fullfuncname, CoreGlobal, size); strncat(fullfuncname, "::", size); strncat(fullfuncname, funcname, size); GV *funcgp = gv_fetchpv(fullfuncname, TRUE, SVt_PVCV); GvCV(funcgp) = perl_get_cv(newfunc, TRUE); GvIMPORTED_CV_on(funcgp); delete [] fullfuncname; return true; } #### Interpreter perl; perl.Overwrite("exit", "Foo::bar");