/* PerlInterpreter.c: Embed a perl interpreter.
* ------------------------------------------------------------------------
* Defines a few helpful functions to embed a perl interpreter.
* Strongly inspired by the perlembed manpage.
* ------------------------------------------------------------------------
* $Id: PerlInterpreter.c 11 2004-10-17 22:19:26Z crenz $
* Copyright (C) 2001, 2004 Christian Renz <crenz@web42.com>.
* All rights reserved.
*/
#include "perlinterpreter.h"
#include <stdio.h>
#include <EXTERN.h>
#include <perl.h>
static PerlInterpreter *my_perl;
EXTERN_C void boot_DynaLoader (pTHX_ CV* cv);
EXTERN_C void xs_init(pTHX) {
char *file = __FILE__;
dXSUB_SYS;
/* DynaLoader is a special case */
newXS("DynaLoader::boot_DynaLoader", boot_DynaLoader, file);
}
void perl_init(int* argcp, char*** argvp, char*** envp) {
PERL_SYS_INIT3(argcp, argvp, envp);
char *embedding[] = { "", "-e", "0" };
my_perl = perl_alloc();
perl_construct(my_perl);
perl_parse(my_perl, xs_init, 3, embedding, NULL);
perl_run(my_perl);
}
void perl_init_argv(int argc, char **argv) {
Perl_init_argv_symbols(my_perl, argc - 1, argv + 1);
}
void perl_destroy() {
perl_destruct(my_perl);
perl_free(my_perl);
PERL_SYS_TERM();
}
void perl_exec(char *s) {
eval_pv(s, TRUE);
}
char * perl_getstring(char *s) {
SV *sv = get_sv(s, FALSE);
if (!sv)
return NULL;
return SvPV(sv, PL_na);
}
/* eof *******************************************************************/