gpt4 book ai didi

perl - 从内联 C 访问全局 perl 变量

转载 作者:行者123 更新时间:2023-12-03 18:23:12 25 4
gpt4 key购买 nike

我试图从内联 C 函数中访问 perl 全局变量(在本例中为 $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

最佳答案

使用 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);
}
GV_ADD如果变量不存在,flag 将创建变量(并将其初始化为 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 中.

关于perl - 从内联 C 访问全局 perl 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40767302/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com