You can access package variables directly:

$::data = "this is a test";
test();

use Inline C => <<'END_OF_C_CODE';

void test() {
            printf("here: %s\n", SvPV_nolen(get_sv("::data",0)));
}
END_OF_C_CODE


…see “perldoc perlguts”:
    If you know the name of a scalar variable, you can get a pointer to its SV
    by using the following:

        SV*  get_sv("package::varname", 0);

    This returns NULL if the variable does not exist.

You can’t access lexical-scoped scalars (“strict” ones) this way, because they 
often do not have a name at all.

You can place reference of your my-var to package variable though and 
dereference it in your C code.

Regards,
Vadim.



From: Perf Tech [mailto:perfte...@gmail.com]
Sent: Wednesday, November 23, 2016 8:30 AM
To: inline@perl.org
Subject: Question about accessing global data from a line function

Dear expert,

   I am trying to access perl global variable ($data in this case) from within 
a inline C function, but the "data" variable I used is not defined.
Any idea how to do it?

Thanks
Jin


$data = "this is a test";
test();

use Inline C => <<'END_OF_C_CODE';

void test() {
            printf("here: %s\n", SvPV(data, PL_na));
}

END_OF_C_CODE

Reply via email to