使用get_sv
(或get_av
/get_hv
)宏访问以串联/ 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);
}
的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);
}
这在perlguts
记录。
来源
2016-11-23 15:07:44
mob
谢谢@mob的确切答案! – packetie