Для встраивания c в perl, вы ищете XS.Обширную документацию по этому вопросу можно найти в perlxs
и perlxstut
.
Что касается построения структур данных Perl из C, вам придется использовать частииз 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 };