C program szkriptezése - Perl scripttel

C program szkriptezése - Perl scripttel

Hozzászólások

Nézegettem, hogy hogyan lehetne egy adott C (esetleg C++) nyelven megírt programban olyan eseménykezelést írni, hogy perl scriptek fussanak le. Ami megy, az a man perlembed alapján egy perl script meghívása.
Amire viszont nem találtam példát, az az, hogy egy-egy C függvényt hívna meg (persze, ott az xs...), és pl struct-ok jelennének meg a perl scriptben.

Valaki meg tudja mondani, hogy hogy kellene (linkek is jók :))

Nem hiszem, hogy igazán ezt akarod....
Egyébként létezik a Perl-hez C fordító is, a scriptedből csinál binárist.

A gond ott van, nem tudom, pontosan mit akarok. A perl jó ötletnek tűnt.

A C nyelvű programban adatokat kellene módosítani, amik jobbára rekordokból álló tömbök. Ezt valahogy úgy kellene, hogy a lefordított programot már ne kelljen módosítani, ha valamilyen többlet funkciót adok hozzá. A másik irányban pedig a kód bizonyos részeiről szeretnék meghívni egy ilyen külső függvényt. Végülis akár shared object is lehetne, de akkor épp a gyorsan megírható, egyszerű kódok használatát zárom ki.

te pluginezni akarsz :)
keress ra a neten tuti van konnyen hasznalhato plugin framework keszen. akarmilyen nyelven

[quote:d1caad5d8c="anr"]te pluginezni akarsz :)
keress ra a neten tuti van konnyen hasznalhato plugin framework keszen. akarmilyen nyelven

Köszi :) Nem jutott eszembe így :P

Egyet már találtam, kicsit átírom, s biztos jó lesz. Bár nem épp perl, de legalább olvasható marad (python, stb)...

libperl? erre van :wink: (perl scriptek hivasa cpbol)

No, most megy annyira, hogy perl scritpname.pl. De programban nem:

$ ./test-perl showtime.pl
Can't load module Mytest, dynamic loading not available in this perl.
(You may need to build a new perl executable which either supports
dynamic loading or has the Mytest module statically linked into it.)
at showtime.pl line 3
Compilation failed in require at showtime.pl line 3.
BEGIN failed--compilation aborted at showtime.pl line 3.
Undefined subroutine &main::showtime called at showtime.pl line 3.

Szerk: man perlembed-ben benne van a megoldás.
A programban használt függvények extern kulcsszóval (igazából nem kellene ez sem) bent vannak a .xs fájlomban, amiből keletkezett shared object szépen megtalálja ezeket :):)

[quote:cab0b6fbd9="Panther"][quote:cab0b6fbd9="anr"]te pluginezni akarsz :)
keress ra a neten tuti van konnyen hasznalhato plugin framework keszen. akarmilyen nyelven

Köszi :) Nem jutott eszembe így :P

Egyet már találtam, kicsit átírom, s biztos jó lesz. Bár nem épp perl, de legalább olvasható marad (python, stb)...

perlesként persze nekem szimpi a perles ötleted, de praktikus okoknál fogva gondolkoztál már a lua-n? arról mintha azt olvastam volna, hogy direkt erre lett kitalálva és a méretéhez képest igen jól felszerelt prog nyelv.
www.lua.org , ha minden jól megy.

Már megfordult a lua is a fejemben, régebben, s már nem tudom, mi célból :) A perl szimpatikusabb, mert ismerem valamennyire (csak kb másfél évig nem írtam egy sor kódot sem, így bele kell rázódnom), viszont talán-talán a másik felhasználóbarátabb.

Szokatlannak tartom a script futtatást. Elsősorban a kockázat miatt. Nem egy biztonságos dolog indítani egy olyan scriptet, ami bármit tartalmazhat. Próbálkozni kell egy körülhatárolt érvényeségű "conf" file létrehozásával.

ELaci

Felhasználási területtől függ. Épp az openttd-be próbálom belevadászni a _működű_ kódrészletet. De nem müxik:

perlplugins.o: In function `xs_init':
perlplugins.c:(.text+0x9): undefined reference to `boot_DynaLoader'
collect2: ld returned 1 exit status

Az az érdekes, hogyha egy olyan fájllal fordítom, amiben csak egy üres main fv van, akkor simán lefordul. Így meg nem linkeli össze.

No persze minden megoldható. Workaround megvolt, lefordul...