我希望在Perl中嵌入一个C代码。在这个C代码中,我想将一个巨大的文件读入内存,进行一些更改并构建一个哈希(一个自定义的)。我希望从我的Perl代码中访问此哈希。可能吗?我怎样才能达到目标?
答案 0 :(得分: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
这是一个名为some_func
的XS子例程,它将构建一个哈希并将其引用返回到perl空间:
my $href = some_func();
# $href = { foo => 42, bar => 23 };
答案 1 :(得分:3)
答案 2 :(得分:1)
您可以使用SWIG在C,Perl和其他几种语言之间进行接口。