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

mag*_*ala 5 c perl hash xs

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

raf*_*afl 11

对于在perl中嵌入c,您正在寻找XS.关于这方面的大量文档可以在perlxs和中找到perlxstut.

至于从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
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)


Nik*_*ain 3

  • 请参阅内部结构和 C 语言接口
  • 另请参阅Inline-C,用于在 perl 中嵌入 C 代码:Inline 模块允许您将其他编程语言的源代码直接“内联”到 Perl 脚本或模块中。代码会根据需要自动编译,然后加载以便从 Perl 立即访问。

另请阅读为什么我应该使用 Inline 来做到这一点?