Thread Perl und C++ verheiraten: als Perl Modul (7 answers)
Opened by cbxk1xg at 2006-02-10 17:28

Neal_the_real
 2006-02-21 15:11
#11353 #11353
User since
2006-02-21
21 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ha genau an so einer Sache bin ich auch dran.

Und zwar ist das so:
Ich habe ein Perl Modul in dem all die Konfigurationen stehen. Datenbanken, Services, IP Adressen usw. Dieses Modul, nennen wir es einmal MyConfig.pm ,stellt also fuer alle Perlscripte eine Zentrale Configuration dar. So weit so gut. Jetzt moechte ich aber auch gerne meine C Programme mit den Services versorgen koennen.
Ich habe schon mal 'a weng rumprobiert das auch funktioniert, was ich noch nicht kann ist Datenstruktuern von Perl in C zu exportieren (array, hash, objekte). Mit string's geht es aber. Hier das Beispiel:

Das Perlmodul MyConfig.pm
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
package MyConfig;

use strict;
use Exporter;
use vars qw(@ISA @EXPORT $var);

@ISA = qw(Exporter);
@EXPORT = qw($var);

$var = "SOME_FOO";

1;

Und das C Programm
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <stdlib.h>
#include <EXTERN.h>
#include <perl.h>

static PerlInterpreter *my_perl;

int main(void) {
char *var;
char *embedding[] = {"", "-e", "0"};

my_perl = perl_alloc();
perl_construct(my_perl);
perl_parse(my_perl, NULL, 3, embedding, NULL);
perl_run(my_perl);

eval_pv("use MyConfig", TRUE);
var = SvPV_nolen(get_sv("MyConfig::var", TRUE));

printf(">%s<\n", var);

return(EXIT_SUCCESS);
}

Und das Makefile (WICHTIG vor dem gcc ... muss ein <TAB> sein)
Code: (dl )
1
2
3
4
5
6
PERL_CCOPTS = `perl -MExtUtils::Embed -e ccopts`
PERL_LDOPTS = `perl -MExtUtils::Embed -e ldopts`

all:
gcc -g -o read_config.o -c read_config.c $(PERL_CCOPTS)
gcc -g -o read_config read_config.o $(PERL_LDOPTS)


Evtl. koennte mir da jemand auf die spruegen helfen wie ich ein array von perl in C exportioeren kann.


--
Gruss Neal
--
Gruss Neal

Hier koennte ein schlauer Spruch stehen!

View full thread Perl und C++ verheiraten: als Perl Modul