Как я могу построить хэш Perl в коде C? - PullRequest
5 голосов
/ 05 октября 2010

Я хочу встроить C-код в Perl. В этом C-коде я хочу прочитать огромный файл в память, внести некоторые изменения и создать хэш (пользовательский). Я хочу сделать этот хеш доступным из моего кода Perl. Является ли это возможным? Как я могу достичь цели?

Ответы [ 3 ]

11 голосов
/ 05 октября 2010

Для встраивания 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 };
3 голосов
/ 05 октября 2010
  • См. Интерфейсы внутренних языков и языка C
  • Также обратите внимание на Inline-C для встраивания кода C в perl: Встроенный модуль позволяет вам помещать исходный код из других языков программирования непосредственно "inline" в скрипт или модуль Perl.Код автоматически компилируется по мере необходимости, а затем загружается для немедленного доступа из Perl.

Также читайте Почему я должен использовать Inline, чтобы сделать это?

1 голос
/ 05 октября 2010

Вы можете использовать SWIG для взаимодействия между C, Perl и несколькими другими языками.

...