5

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

4

3 回答 3

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

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

my $href = some_func();
# $href = { foo => 42, bar => 23 };
于 2010-10-05T08:53:53.660 回答
3
  • 请参阅内部和 C 语言接口
  • 还可以查看Inline-C在 perl 中嵌入 C 代码:Inline 模块允许您将来自其他编程语言的源代码直接“内联”到 Perl 脚本或模块中。代码会根据需要自动编译,然后加载以便从 Perl 立即访问。

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

于 2010-10-05T08:49:38.633 回答
1

您可以使用SWIG在 C、Perl 和其他几种语言之间进行交互。

于 2010-10-05T08:51:11.637 回答