in reply to Embed perl problem
Here is something to get you started and how to make END blocks work (just slightly modified from a example in perlembed):
#include <EXTERN.h> #include <perl.h> /* * embedex.c * based on https://perldoc.perl.org/perlembed.html * slightly modified by bliako for https://perlmonks.org/?node_id=1229 +069 * actually, bliako just inserted the perl code. */ static PerlInterpreter *my_perl; int main (int argc, char **argv, char **env){ char *embedding[] = { "", "-e", "0" }; PERL_SYS_INIT3(&argc,&argv,&env); my_perl = perl_alloc(); perl_construct( my_perl ); perl_parse(my_perl, NULL, 3, embedding, NULL); PL_exit_flags |= PERL_EXIT_DESTRUCT_END; perl_run(my_perl); eval_pv("BEGIN{ print q(in BEGIN\n); } print q(running\n); END { +print q(in END\n); }; 1;", TRUE); perl_destruct(my_perl); perl_free(my_perl); PERL_SYS_TERM(); }
You need to compile the above using CC, CFLAGS and LDFLAGS best supplied by Perl itself via Config and ExtUtils::Embed like so (assuming bash shell):
Update: Just to clarify that the above is about embedding a perl interpreter inside a C program. The interpreter is then used to execute a perl script. This has nothing to do with taking a Perl script and converting it into C code. Or converting a Perl script into assembly. Or converting a Perl optree to C code or assembly.
$(perl -MConfig -e 'print $Config{cc}') embedex.c $(perl -MExtUtils::E +mbed -e ccopts -e ldopts) -o embedex
$ ./embedex in BEGIN running in END
Regarding detecting when a perl script is run under a debugger, read perlvar
bw, bliako
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Embed perl problem
by Noves Castro (Novice) on Jan 29, 2019 at 03:45 UTC | |
by bliako (Abbot) on Jan 29, 2019 at 11:37 UTC | |
by Noves Castro (Novice) on Feb 02, 2019 at 18:33 UTC | |
by bliako (Abbot) on Feb 02, 2019 at 19:23 UTC | |
by Noves Castro (Novice) on Feb 03, 2019 at 04:01 UTC | |
|