我希望在 Perl 中嵌入 C 代码。在此 C 代码中,我想将一个大文件读入内存,进行一些更改并构建一个哈希(自定义哈希)。我希望可以从我的 Perl 代码访问这个散列。是否可以?我怎样才能达到目标?
最佳答案
要在 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 };
关于c - 如何在 C 代码中构建 Perl 哈希?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3862104/