2010-10-05 22 views

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?

+0

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

+0

Napiszę kod XS, kiedy będę musiał, ale kiedy nie muszę, Inline :: C jest niesamowita. – mob

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 };