Re: Question about accessing global data from a line function

[email protected] (Ron Grunwald via inline) Tue, 29 Nov 2016 22:10:54 +0800
Newsgroups perl.inline
Message-ID <[email protected]>
--Apple-Mail=_2AF94742-E432-40CA-81CE-777EF4F94E13
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
	charset=utf-8

Hi Jin,

I don=E2=80=99t think you can access perl variables this way because =
your C function needs some sort of reference to them. Change your code =
to,

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

use Inline C =3D> <<'END_OF_C_CODE';

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

END_OF_C_CODE

Cheers,
Ron.

> On 23 Nov 2016, at 1:29 pm, Perf Tech <[email protected]> wrote:
>=20
> Dear expert,
>=20
>    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?
>=20
> Thanks
> Jin
>=20
>=20
> $data =3D "this is a test";
> test();
>=20
> use Inline C =3D> <<'END_OF_C_CODE';
>=20
> void test() {
> 	printf("here: %s\n", SvPV(data, PL_na));
> }
>=20
> END_OF_C_CODE
>=20


--Apple-Mail=_2AF94742-E432-40CA-81CE-777EF4F94E13
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html;
	charset=utf-8

<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html =
charset=3Dutf-8"></head><body style=3D"word-wrap: break-word; =
-webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" =
class=3D"">Hi Jin,<div class=3D""><br class=3D""></div><div class=3D"">I =
don=E2=80=99t think you can access perl variables this way because your =
C function needs some sort of reference to them. Change your code =
to,</div><div class=3D""><br class=3D""></div><div class=3D""><div =
class=3D""><font face=3D"Courier" style=3D"font-size: 12px;" =
class=3D"">$data =3D "this is a test";</font></div><div class=3D""><font =
face=3D"Courier" style=3D"font-size: 12px;" class=3D"">test(<b =
class=3D"">$data</b>);</font></div><div class=3D""><font face=3D"Courier" =
style=3D"font-size: 12px;" class=3D""><br class=3D""></font></div><div =
class=3D""><font face=3D"Courier" style=3D"font-size: 12px;" =
class=3D"">use Inline C =3D&gt; =
&lt;&lt;'END_OF_C_CODE';</font></div><div class=3D""><font =
face=3D"Courier" style=3D"font-size: 12px;" class=3D""><br =
class=3D""></font></div><div class=3D""><font face=3D"Courier" =
style=3D"font-size: 12px;" class=3D"">void test(<b class=3D"">SV* =
data</b>) {</font></div><div class=3D""><font face=3D"Courier" =
style=3D"font-size: 12px;" class=3D""><span class=3D"gmail-Apple-tab-span"=
 style=3D"white-space: pre;">	</span>printf("here: %s\n", =
SvPV(data,&nbsp;PL_na));</font></div><div class=3D""><font =
face=3D"Courier" style=3D"font-size: 12px;" class=3D"">}</font></div><div =
class=3D""><font face=3D"Courier" style=3D"font-size: 12px;" =
class=3D""><br class=3D""></font></div><div class=3D""><font =
face=3D"Courier" style=3D"font-size: 12px;" =
class=3D"">END_OF_C_CODE</font></div><div style=3D"font-family: =
Avenir-Book;" class=3D""><br class=3D""></div><div style=3D"font-family: =
Avenir-Book;" class=3D"">Cheers,</div><div style=3D"font-family: =
Avenir-Book;" class=3D"">Ron.</div>
<br class=3D""><div><blockquote type=3D"cite" class=3D""><div =
class=3D"">On 23 Nov 2016, at 1:29 pm, Perf Tech &lt;<a =
href=3D"mailto:[email protected]" class=3D"">[email protected]</a>&gt;=
 wrote:</div><br class=3D"Apple-interchange-newline"><div class=3D""><div =
dir=3D"ltr" class=3D""><div class=3D"">Dear expert,</div><div =
class=3D""><br class=3D""></div><div class=3D"">&nbsp; &nbsp;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.</div><div =
class=3D"">Any idea how to do it?</div><div class=3D""><br =
class=3D""></div><div class=3D"">Thanks</div><div class=3D"">Jin</div><div=
 class=3D""><br class=3D""></div><div class=3D""><br class=3D""></div><div=
 class=3D""><div class=3D""><span =
style=3D"background-color:rgb(255,255,0)" class=3D"">$data</span> =3D =
"this is a test";</div><div class=3D"">test();</div><div class=3D""><br =
class=3D""></div><div class=3D"">use Inline C =3D&gt; =
&lt;&lt;'END_OF_C_CODE';</div><div class=3D""><br class=3D""></div><div =
class=3D"">void test() {</div><div class=3D""><span =
class=3D"gmail-Apple-tab-span" style=3D"white-space:pre">	=
</span>printf("here: %s\n", SvPV(<span =
style=3D"background-color:rgb(255,255,0)" class=3D"">data</span>, =
PL_na));</div><div class=3D"">}</div><div class=3D""><br =
class=3D""></div><div class=3D"">END_OF_C_CODE</div><div class=3D""><br =
class=3D""></div></div></div>
</div></blockquote></div><br class=3D""></div></body></html>=

--Apple-Mail=_2AF94742-E432-40CA-81CE-777EF4F94E13--