Chcę osadzić kod C w Perlu. W tym kodzie C chcę przeczytać ogromny plik w pamięci, wprowadzić pewne zmiany i skompilować hasz (niestandardowy). Chcę udostępnić ten skrót z mojego kodu Perla. Czy to możliwe? Jak mogę osiągnąć cel?Jak mogę utworzyć mieszanie Perla w kodzie C?
5
A
Odpowiedz
3
- Zobacz Internals and C language interface
- Również spojrzeć na Inline-C dla wbudowanego kodu C w Perlu: The Inline module pozwala na kodzie źródłowym put z innych języków programowania bezpośrednio „inline” w skrypcie Perl lub modułu . Kod jest automatycznie kompilowany jako potrzebny, a następnie załadowany do natychmiastowego dostępu z Perla.
przeczytać również Why should I use Inline to do it?
1
SWIG można użyć do interfejsu między C, Perl, i kilku innych językach.
11
Do osadzania c w perlu, szukasz XS. Obszerna dokumentacja na ten temat znajduje się w perlxs
i perlxstut
.
Jeśli chodzi o budowanie struktur danych perl z C, będziesz musiał użyć części perlapi
, które zajmują się skrótami. Wiele dokumentacji na temat XS objaśnia różne fragmenty tego. Ważne części, których szukasz, to: newHV
i hv_store
.
Oto małe (i całkowicie niesprawdzone) przykład coś podobnego do tego, co możesz zrobić:
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
To podprogram XS nazywa some_func
, że będziemy budować hash i zwraca referencję do niego do perl space:
my $href = some_func();
# $href = { foo => 42, bar => 23 };
Och, przestań polecać Inline jako de facto standardowe rozwiązanie takich rzeczy. To koszmar w realizacji. O ile nie ma wymogu "muszę to zrobić tylko na moim komputerze i mojej maszynie", Inline przekłada się na problemy na drodze. – tsee
Napiszę kod XS, kiedy będę musiał, ale kiedy nie muszę, Inline :: C jest niesamowita. – mob