我试图从内联C函数中访问perl全局变量(在这种情况下是$ data),但我没有定义我使用的"data"变量.知道怎么做吗?
谢谢
以下代码片段会给出错误,抱怨未声明变量"data".
$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
Run Code Online (Sandbox Code Playgroud)
使用get_sv(或get_av/ get_hv)宏来访问Inline/XS代码中的全局变量.
package main;
use Inline C;
our $Bar = 123;
test();
__DATA__
__C__
void test() {
SV* var = get_sv("Bar", GV_ADD);
const char *val = SvPVutf8_nolen(var);
printf("Value of $Bar is %s", val);
}
Run Code Online (Sandbox Code Playgroud)
如果GV_ADD该变量undef尚不存在,该标志将创建变量(并将其初始化为).如果访问尚不存在的变量且未使用此标志,get_sv则返回NULL.
如果您要查找的变量与其他包不同main,则必须在get_sv调用中限定它:
package Foo;
use Inline C;
our $Bar = 123;
test();
__DATA__
__C__
void test() {
SV* var = get_sv("Foo::Bar", GV_ADD); /* need "Foo::" now */
const char *val = SvPVutf8_nolen(var);
printf("Value of $Foo::Bar is %s", val);
}
Run Code Online (Sandbox Code Playgroud)
这是记录在案perlguts.
| 归档时间: |
|
| 查看次数: |
171 次 |
| 最近记录: |