Thread #include <perl.h>perl interpreter: perlembed in C (11 answers)
Opened by blaise4714 at 2007-05-02 14:11

blaise4714
 2007-05-02 14:11
#76360 #76360
User since
2007-04-18
22 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo @lle!
ich habe eine Frage Perl interpreter: Perlemb. Ich habe folgende code in mein C programm eingefügt
Code: (dl )
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
39
40
41
42
#include <perl.h>

#ifndef DO_CLEAN
#define DO_CLEAN 0
#endif
#define BUFFER_SIZE 1024
static PerlInterpreter *my_perl = NULL;
main {
int argc;
char **argv;
char **env;
char *embedding[] = { "", "persistent.pl"};
char *args[] = { "", DO_CLEAN, NULL};

int exitstatus = 0;
STRLEN n_a;
my_perl = perl_alloc();
PERL_SYS_INIT3(&argc, &argv,&env);
if ((my_perl = perl_alloc()) == NULL) {
fprintf(stderr, "No Memory!");
exit(1);
}
perl_construct(my_perl);
exitstatus = perl_parse(my_perl, NULL,2, embedding, NULL);
PL_exit_flags |= PERL_EXIT_DESTRUCT_END;
if (!exitstatus){
exitstatus = perl_run(my_perl);
args[0] = "tester1.pl";
call_argv("Embed::Persistent::eval_file", G_DISCARD | G_EVAL, args);
eval_pv("@time",TRUE);
eval_pv("$test",TRUE);

if (SvTRUE(ERRSV))
fprintf(stderr,"eval error: %s\n",SvPV(ERRSV, n_a));
}

PL_perl_destruct_level = 0;
perl_destruct(my_perl);
perl_free(my_perl);
PERL_SYS_TERM();
exit(exitstatus);
}


Für ein klein Perl programm funktionniert dieses code gut. Ein klein programm ist damit gemeint:
Code: (dl )
1
2
3
4
5
6
7
8
 tester1.pl
$a = 1;
foo($a);

sub foo {

print "$a \n";
}


für ein viel grössere Perl programm (objecktorientiert, for schleifen , if schleifen...), mit grosser @arrays (ungefähr 50 elemente). funktionniert der C code nicht: er gibt keine Werte aus, meldet aber keine fehler;
wo hackt es?
Kann mir jemanden helfen?

danke im voraus

View full thread #include <perl.h>perl interpreter: perlembed in C