> On Tue, Dec 02, 2003 at 05:40:14PM -0600 Dan Muey wrote:
>
> > What I was wondering about was how to execute some perl
> code *inside*
> > the c program instead of takign it via ARGV. I think eval_pv and
> > eval_sv have somethgin to do with it but I'm a bit cloudy
> there. Since
> > I don't know hardly anythgin about C I'll illustarte it in Perl.
> >
> > my $perlcode = <<CODE;
> > # instead of getting this via command line argument
> > sub simplepage {
> > my $name = shift || 'world';
> > use CGI qw(header param);
> > print header()
> > print "I am perl hear me roar $name\n";
> > print insult();
> > }
> > sub insult { return "So is ytour mother\n"; }
> > return simplepage(param('name'));
> > CODE
> >
> > printf eval_pv($perldoc);
> >
> > Basically execute bunch of code, from a one liner to a
> bunch of lines,
> > that basically ends with one return value(an html webpage) and then
> > print that value out.
>
> This can't work because you cannot have return-statements
> outside of subroutines in Perl. However, why not just leave
> the 'return' off:
>
> my $perldocde = <<CODE;
> ...
> simplepage(param{name});
> CODE
>
> And from C:
>
> STRLEN n_a;
> char *string;
> SV *ret;
> ...
> ret = eval_pv(perlcode, TRUE);
^^^^^^^^
Is that a variable?
How would one safely get some code into a C variable?
Like in Perl I can use qq() or similar or escape certain
chacters. So double quotes don't kill me.
> string = SvPV(ret, n_a);
>
> eval_pv() returns the last statement evaluated as a SV.
>
Thanks for the insight!
So, if I understand it right (and assuming I compile it properly of course ;p) I would
need something like this: [questions commented]
#include <EXTERN.h>
#include <perl.h>
static PerlInterpreter *my_perl;
main (int argc, char **argv, char **env)
{
STRLEN n_a;
char *string; /** added to perldoc example **/
SV *ret; /** added to perldoc example**/
my_perl = perl_alloc();
perl_construct( my_perl );
perl_parse(my_perl, NULL, 3, embedding, NULL);
perl_run(my_perl);
ret = eval_pv(perlcode, TRUE); /** So how do I get my code safely into perlcode
?? **/
/** could I just printf(SvPV(...)) right here and shorten it a bit?? **/
string = SvPV(ret, n_a);
perl_destruct(my_perl);
perl_free(my_perl);
/** Would this be better right after string = SvPV(...) or after perl_free()
?? **/
printf(string);
}
I got the first example (IE the -e "print "howdy";' version) working and am playing
around with having it inside
> Tassilo
> --
> $_=q#",}])!JAPH!qq(tsuJ[{@"tnirp}3..0}_$;//::niam/s~=)]3[))_$-
> 3(rellac(=_$({
> pam{rekcahbus})(rekcah{lrePbus})(lreP{rehtonabus})!JAPH!qq(reh
> tona{tsuJbus#;
> $_=reverse,s+(?<=sub).+q#q!'"qq.\t$&."'!#+sexisexiixesixeseg;y
> ~\n~~dddd;eval
>
>
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]