I don't know about better ... but you could create a c function
that evaluates strings (ala perlembed):
#include <EXTERN.h>
#include <perl.h>
static PerlInterpreter *my_perl;
SV* my_eval_sv(SV *sv, I32 croak_on_error)
{
dSP;
SV* retval;
STRLEN n_a;
PUSHMARK(SP);
eval_sv(sv, G_SCALAR);
SPAGAIN;
retval = POPs;
PUTBACK;
if (croak_on_error && SvTRUE(ERRSV))
croak(SvPVx(ERRSV, n_a));
return retval;
}
main (int argc, char **argv, char **env)
{
STRLEN n_a;
char *embedding[] = { "", "-e", "0" };
SV *var, *cmd;
my_perl = perl_alloc();
perl_construct( my_perl );
perl_parse(my_perl, NULL, 3, embedding, NULL);
perl_run(my_perl);
var = newSVpvf( "%s", "ybred" );
printf( "var is %s\n", SvPV(var,n_a) );
cmd = newSVpvf( "reverse('%s');", SvPV(var,n_a) );
var = my_eval_sv( cmd, TRUE );
printf( "var is %s\n", SvPV(var,n_a) );
perl_destruct(my_perl);
perl_free(my_perl);
}
-derby |