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

标签 c perl hash xs

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

最佳答案

要在 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

这是一个名为 some_func 的 XS 子例程,它将构建一个散列并将对它的引用返回到 perl 空间:

my $href = some_func();
# $href = { foo => 42, bar => 23 };

关于c - 如何在 C 代码中构建 Perl 哈希?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3862104/

相关文章:

c - 使用 toupper 函数的 C 程序的奇怪输出

perl - POSIX 模块的问题

Perl - 如果需要很长时间,在按键时中断系统/反引号命令

php - 如何正确解释哈希方案的递归伪代码

c - 在这种情况下是否可以制作一个最小的完美哈希函数?

java - 根据哈希值确认文件内容

c - memcpy 导致段错误

c - 在函数中使用#define

c - 在 C 中使用 free() 函数

regex - 如何在不设置变量的情况下进行perl内联正则表达式?