summaryrefslogtreecommitdiffstats
path: root/examples/loadables/perl/iperl.c
blob: 89438af1698195c69f51f26727720400d225eb34 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <EXTERN.h>               /* from the Perl distribution     */
#include <perl.h>                 /* from the Perl distribution     */

#define iperl my_perl		/* I guess the name `my_perl' is required */

extern void xs_init (pTHX);

static PerlInterpreter *iperl;  /***    The Perl interpreter    ***/

static int first = 1;

void
perl_close (void)
{
	PERL_SYS_TERM();
}

int
perl_main(int argc, char **argv, char **env)
{
	int	r;

	if (first) {
		first = 0;
		PERL_SYS_INIT3(&argc, &argv, &env);
	}
	iperl = perl_alloc();
	perl_construct(iperl);
	perl_parse(iperl, xs_init, argc, argv, (char **)NULL);
	r = perl_run(iperl);

PerlIO_flush(PerlIO_stdout());
PerlIO_flush(PerlIO_stderr());

	perl_destruct(iperl);
	perl_free(iperl);
	return (r);
}