>есть char *body; в котором находится некоторый текст,
>как можно передать его Perl программе, которая изменит его
>определенным образом, а затем получить обратно ?
>т.е.
>на входе один body, на выходе другой.
Для запуска перл программы из C необходимо:
1. иницилизироать Перл интерпретатор
2. скомпилировать программу Перла
3. иницилизировать переменные для Перла
4. запустить перл процедуру
5. получить данные из Перла
Существует несколько спсобов запуска перл из C один из них приведен ниже
для компиляции используй строку:
gcc -c prog.c `perl -MExtUtils::Embed -e ccopts`
для компановки
gcc -o prog prog.o `perl -MExtUtils::Embed -e ldopts`
#include <EXTERN.h>
#include <perl.h>
static PerlInterpreter *perl;
int main(int num,char *arg[])
{
char *argv[2];
char *body;
// подготовка интерпретатора
SV *PerlVar;
perl=perl_alloc();
perl_construct(perl);
argv[0]=arg[0]; argv[1]=PerlName;
perl_parse(perl, NULL, 2,argv,(char **)NULL);
PerlVar=get_sv("BODY",TRUE); // создать переменную видимую в перле как $BODY
sv_setpv(PerlVar,body); // передать переменной $BODY значение
//
// ВЫЗОВ ФУНКЦИИ
//
// подготовка стека
dSP; ENTER; PUSHMARK(SP);
// загрузка данных
PUSHs(sv_2mortal(newSVpv((char *)body,strlen(body))));
PUTBACK;
// вызов процедуры
call_pv(name,G_SCALAR);
// возврат данных
SPAGAIN; PerlVar =POPs; LEAVE;
// получение данных из переменной
*res = SvPVnolen(PerlVar);
// завершение использования Перла
perl_free(perl);
exit(0);
}
(для более подробной информации см. Perlembed)