Adding Perl Core functions

G

Guenther Sohler

Hallo, I was able to integrate embedded perl into my c program.
So I am able to call perl scripts from within my program.
Now I want to call c routines from within the perl code.
How can I do so ? I have to add an extra function to perl


rds
 
M

Mark Clements

Guenther said:
Hallo, I was able to integrate embedded perl into my c program.
So I am able to call perl scripts from within my program.
Now I want to call c routines from within the perl code.
How can I do so ? I have to add an extra function to perl

Read the documentation for xs.

man perlxs

Mark
 
S

Sherm Pendley

Mark said:
Read the documentation for xs.

man perlxs

Also, "perldoc perlxstut" for an XS tutorial.

And, "perldoc perl" has a section that lists a number of relevant docs,
titled "Internals and C Language Interface".

sherm--
 
S

Sisyphus

Guenther Sohler said:
Hallo, I was able to integrate embedded perl into my c program.
So I am able to call perl scripts from within my program.
Now I want to call c routines from within the perl code.
How can I do so ? I have to add an extra function to perl

As an alternative to the xs approach, take a look at the Inline::C module.
See 'perldoc Inline::C-Cookbook' and 'perldoc Inline::C'.

Cheers,
Rob
 
G

Guenther Sohler

Hallo Rob, ( and all the Others).
Defintely I will have a look at the Inline::C Routine.
At the weekend I had a look at the XS Approch(without beeing able to read
the newsgroup before.
Unfortunately the XS Approach did not really fit into my concept.
Using XS sounded like creating an extra, external Module for perl.

My Intent is following:
* I have a C program with an embedded perl interpreter
* I want to use the perl interpreter to have a scripting language for my
program
* But I want to have special program-related perl commands that act on
my programs database. If I did not want this I could use a normal perl
interpreter from the beginning
* Therefore I somehow want to register C- callback functions under a
dedicated perl function name.

I have written a c callback function, which draws a rectangle. It is
called
draw_rectangle. Then I instanciate a perl interpreter in my C program.
Then I want instruct !!!! "C" !!!! to register the callback function as
a new perl_command "draw_rectangle".
Finally I instruct the perl interpreter to execute a script from a file.
I dont mind, if the c callback functio has to evaluate the perl stack,
but It would be fine, if my function was registered in the main
namespace(no :: in function name) and if there were no measures in the
perl program to load the draw_rectangle from an external module).

There are to reasons why I dont want my "draw_rectangle" from an external
perl module
* I dont want to keep my program as simple as possible - No extra
files if possible
* I fear, that the extern module is not able anymore to access the
program database as it is seperated from the main program


Who has the perfect solution for me ?


On Sat,
 
I

Ilya Zakharevich

[A complimentary Cc of this posting was sent to
Guenther Sohler
Unfortunately the XS Approach did not really fit into my concept.
Using XS sounded like creating an extra, external Module for perl.

Not necessarily. First, debug it as an external module. Then, when
things work, compile the C part into your executable. Eval the Perl
part (if needed) from your start-perl shim before doing perl_run()
(sp?).

But usually no Perl part is required at all; see how UNIVERSAL::*
methods are implemented in Perl proper.

Hope this helps,
Ilya
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
474,169
Messages
2,570,920
Members
47,464
Latest member
Bobbylenly

Latest Threads

Top