raf*_*afl 11
对于在perl中嵌入c,您正在寻找XS.关于这方面的大量文档可以在perlxs和中找到perlxstut.
至于从C构建perl数据结构,你将不得不使用perlapi处理哈希的部分.关于XS的许多文档已经解释了各种各样的内容.你正在寻找的重要部分是newHV和hv_store.
这是一个很小的(并且完全未经测试的)示例,类似于您可能想要做的事情:
SV *
some_func ()
PREINIT:
HV *hash;
CODE:
hash = newHV();
hv_stores(hash, "foo", 3, newSViv(42));
hv_stores(hash, "bar", 3, newSViv(23));
RETVAL = newRV_noinc((SV *)hash);
OUTPUT:
RETVAL
Run Code Online (Sandbox Code Playgroud)
这是一个名为的XS子例程some_func,它将构建一个哈希并将其引用返回到perl空间:
my $href = some_func();
# $href = { foo => 42, bar => 23 };
Run Code Online (Sandbox Code Playgroud)