qt1zzle has asked for the wisdom of the Perl Monks concerning the following question:

I am working with perlembed. I know how to convert a perl value to a C value. However, I have a C function that returns of char* array and I want to convert it to a Perl value. The Perl api is confusing me. How do I do this?
  • Comment on PerlEmbed convert C value to perl value

Replies are listed 'Best First'.
Re: PerlEmbed convert C value to perl value
by Anonymous Monk on Nov 15, 2010 at 22:23 UTC
    One way would be to create a new Perl scalar (SV) and initialize it with the char* contents.

    newSVpv() does both in one call.

      Thanks! One last question: is there a way I can name it so I can use it in a perl script? Say, for instance: char* string = "This is a string"; // Convert to perl val $string eval_pv("print \"$string\n\";");

        Using eval_pv, you'd have to initialise the string as Perl code.

        eval_pv("$string = \"This is a string\"; print(\"$string\\n\");");

        What you really want is call_*. Look at "Passing Parameters" in perlcall.

        static void call_some_perl_sub(const char* s) { dSP; ENTER; SAVETMPS; PUSHMARK(SP); XPUSHs(sv_2mortal(newSVpv(s, strlen(s)))); PUTBACK; call_pv("some_perl_sub", G_DISCARD); FREETMPS; LEAVE; }

        Where some_perl_sub does your printing. eval_pv can be used to create the sub in the first place.

        Update: Added code.