Moduł Inline

Uniwersytet Gdański - Instytut Matematyki - Zakład Informatyki - Strona domowa

Co to jest?

Moduł Inline służy do robienia wstawek w innych językach. Można w łatwy sposób (w porównaniu z XS) wzbogacić program perlowy o kod z innych języków.

Jak użyć?

Na przykład tak: use Inline C=>'void abc() {printf("abc");}'; #definujemy funkcję w C abc(); #a tu ją uruchamiamy w Perlu

lub

use Inline C; print "9 + 16 = ", add(9, 16), "\n"; print "9 - 16 = ", subtract(9, 16), "\n"; __DATA__ __C__ //blok kodu w C int add(int x, int y) { return x + y; } int subtract(int x, int y) { return x - y; }

Funkcje są zdefiniowane w C, a wykonywane w Perlu.

Gdy użyjemy modułu Inline::Files, wtedy wstawki mogą wyglądać tak:

use Inline Java => <<'END'; /* Kod Javy ... */ END # A tu Perl ... lub use Inline::Files; use Inline 'Java'; # Perl ... __JAVA__ /* Java ... */

Konfiguracja

W większości przypadków Inline będzie działać poprawnie. Jednakże czasami trzeba zrobić coś inaczej.

use Inline ( C => 'DATA', DIRECTORY => './inline_dir', LIBS => '-lfoo', INC => '-I/foo/include', PREFIX => 'XXX_', WARNINGS => 0, );

Taki kod będzie ustawiał opcje dla języka C w sekcji DATA.

use Inline ( C => Config => DIRECTORY => './inline_dir', LIBS => '-lfoo', INC => '-I/foo/include', PREFIX => 'XXX_', WARNINGS => 0, ); use Inline C => <<'END_OF_C_CODE';

Config wskazuje, że jest to tylko sekcja ustawień i nie będzie kodu do analizowania.

use Inline ( Config => DIRECTORY => './inline_dir', ); use Inline ( C => Config => #opcje dla C LIBS => '-lglobal', ); use Inline ( C => 'DATA', # Dla pierwszej sekcji C LIBS => ['-llocal1', '-llocal2'], ); use Inline ( Config => #Ustawienia ogólne, odnoszą się do tego co poniżej WARNINGS => 0, ); use Inline ( Python => 'DATA', # Dla pierwszej sekcji Python'a LIBS => '-lmypython1', ); use Inline ( C => 'DATA', # Dla drugiej sekcji C LIBS => [undef, '-llocal3'], );

Ustawienia są dziedziczone i sumowane. Dla pierwszej sekcji C, są używane biblioteki global1, local1 oraz local2. Dla drugiej sekcji undef resetuje ustawienia bibliotek i będzie użyta tylko local3.

Dla opcji, których wartości są 0 lub 1 można użyć ENABLE/DISABLE: use Inline ( Config => ENABLE => FORCE_BUILD, DISABLE => CLEAN_AFTER_BUILD );

Opcje

Wybrane opcje:

DIRECTORY
Ustawia katalog, w którym będą przechowywane skompilowane rozszerzenia. Jeżeli definiujemy go, to musi już istnieć, Inline sam go nie stworzy. Gdy ten parametr nie zostanie zdefiniowany, to Inline szuka katalogu o nazwie '.Inline/'. Jak nie znajdzie to jest tworzony './_Inline'
NAME
Ustawia nazwę naszego rozszerzenia. Np. dla NAME => 'Foo::Bar' zostanie stworzony katalog 'lib/auto/Foo/Bar'.
AUTONAME
Można włączyć (domyślnie jeżeli niezdefiniowane NAME) lub wyłączyć. Tworzy zawsze unikalną nazwę dla kompilowanego rozszerzenia. Nie są one automatycznie sprzątane!
VERSION
Określa wersję. Używa się tylko przy tworzeniu modułów! Musi się zgadzać ze zmienną $VERSON! Inline nie skompiluje kodu do katalogu tymczasowego (_Inline/) jeżeli wersja została ustawiona. Jest to sposób na powiadomienie Inline'a, że moduł jest gotowy do instalacji.
FORCE_BUILD
Wymusza kompilację przy każdym uruchomieniu. Domyślnie jest wyłączona.
BUILD_NOISY
Włącza wypisywanie komunikatów kompilacji na ekran.
BUILD_TIMERS
Wyświetla czasy kompilacji poszczególnych faz. Przeważnie potrzebuje Time::HiRes.

Dodatkowe informacje

Uwagi końcowe

Ten opis wystarczy żeby napisać proste programy perlowe z wstawkami z innych języków (głównie C). Trzeba jednak pamiętać, że ten moduł udostępnia także obsługę innych języków: Java, Python, Ruby, AWK, assembler, PERL i wiele innych.

W tej chwili na Mancie są zainstalowane Inline oraz Inline::C. Brakuje Inline::Files oraz Inline::Java, o które prosiłem. Może za jakiś czas się doczekamy lub ktoś przy okazji zajdzie do adminowa i ponowi prośbę.

Dokumentacja

Oyrginalna dokumentacja Inline na CPANie.

Inne moduły związane z Inline.

Inline::C cookbook - przykłady wykorzystania (warto przeczytać).

Kontakt i informacje o autorze opracowania

Autor: Marek Kwiatkowski

Email: songo@(bez_tego)manta.univ.gda.pl

Uniwersytet Gdański - Instytut Informatyki - Strona domowa - Perl - Wyklady
[c] Piotr Arłukowicz, materiały z tej strony udostępnione są na licencji GNU.