如何在C代码中构建Perl哈希?

时间:2010-10-05 08:46:53

标签: c perl hash xs

我希望在Perl中嵌入一个C代码。在这个C代码中,我想将一个巨大的文件读入内存,进行一些更改并构建一个哈希(一个自定义的)。我希望从我的Perl代码中访问此哈希。可能吗?我怎样才能达到目标?

3 个答案:

答案 0 :(得分:11)

对于在perl中嵌入c,你正在寻找XS。有关该文档的详尽文档可在perlxsperlxstut中找到。

至于从C构建perl数据结构,你将不得不使用处理哈希的perlapi部分。关于XS的许多文档已经解释了各种各样的内容。您要查找的重要部分是newHVhv_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)

  • 请参阅Internals and C language interface
  • 另请参阅Inline-C了解perl中嵌入的C代码:Inline module允许您 把源代码放到其他地方 直接编程语言 Perl脚本或模块中的“inline”。 代码自动编译为 需要,然后立即加载 从Perl访问。

另请阅读 Why should I use Inline to do it?

答案 2 :(得分:1)

您可以使用SWIG在C,Perl和其他几种语言之间进行接口。