我希望在 Perl 中嵌入 C 代码。在这段 C 代码中,我想将一个巨大的文件读入内存,进行一些更改并构建一个哈希(自定义的)。我希望从我的 Perl 代码中访问这个散列。可能吗?我怎样才能达到目标?
问问题
1560 次
3 回答
11
为了在 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
这是一个名为 的 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 回答