Make L<perltrap> refer to L<perldelta>
[p5sagit/p5-mst-13.2.git] / pod / perlembed.pod
CommitLineData
a0d0e21e 1=head1 NAME
2
cb1a09d0 3perlembed - how to embed perl in your C program
a0d0e21e 4
5=head1 DESCRIPTION
6
cb1a09d0 7=head2 PREAMBLE
8
9Do you want to:
10
11=over 5
12
96dbc785 13=item B<Use C from Perl?>
cb1a09d0 14
15Read L<perlcall> and L<perlxs>.
16
54310121 17=item B<Use a Unix program from Perl?>
cb1a09d0 18
5f05dabc 19Read about back-quotes and about C<system> and C<exec> in L<perlfunc>.
cb1a09d0 20
96dbc785 21=item B<Use Perl from Perl?>
cb1a09d0 22
8a7dc658 23Read about L<perlfunc/do> and L<perlfunc/eval> and L<perlfunc/require>
24and L<perlfunc/use>.
cb1a09d0 25
96dbc785 26=item B<Use C from C?>
cb1a09d0 27
28Rethink your design.
29
96dbc785 30=item B<Use Perl from C?>
cb1a09d0 31
32Read on...
33
34=back
35
36=head2 ROADMAP
37
38L<Compiling your C program>
39
a6006777 40There's one example in each of the eight sections:
cb1a09d0 41
42L<Adding a Perl interpreter to your C program>
43
44L<Calling a Perl subroutine from your C program>
45
46L<Evaluating a Perl statement from your C program>
47
48L<Performing Perl pattern matches and substitutions from your C program>
49
50L<Fiddling with the Perl stack from your C program>
51
a6006777 52L<Maintaining a persistent interpreter>
53
8ebc5c01 54L<Maintaining multiple interpreter instances>
55
96dbc785 56L<Using Perl modules, which themselves use C libraries, from your C program>
57
8a7dc658 58This documentation is Unix specific; if you have information about how
9607fc9c 59to embed Perl on other platforms, please send e-mail to <F<orwant@tpj.com>>.
cb1a09d0 60
61=head2 Compiling your C program
62
8a7dc658 63If you have trouble compiling the scripts in this documentation,
64you're not alone. The cardinal rule: COMPILE THE PROGRAMS IN EXACTLY
65THE SAME WAY THAT YOUR PERL WAS COMPILED. (Sorry for yelling.)
cb1a09d0 66
8a7dc658 67Also, every C program that uses Perl must link in the I<perl library>.
cb1a09d0 68What's that, you ask? Perl is itself written in C; the perl library
69is the collection of compiled C programs that were used to create your
70perl executable (I</usr/bin/perl> or equivalent). (Corollary: you
71can't use Perl from your C program unless Perl has been compiled on
72your machine, or installed properly--that's why you shouldn't blithely
73copy Perl executables from machine to machine without also copying the
74I<lib> directory.)
75
8a7dc658 76When you use Perl from C, your C program will--usually--allocate,
77"run", and deallocate a I<PerlInterpreter> object, which is defined by
78the perl library.
cb1a09d0 79
80If your copy of Perl is recent enough to contain this documentation
a6006777 81(version 5.002 or later), then the perl library (and I<EXTERN.h> and
8a7dc658 82I<perl.h>, which you'll also need) will reside in a directory
83that looks like this:
cb1a09d0 84
85 /usr/local/lib/perl5/your_architecture_here/CORE
86
87or perhaps just
88
89 /usr/local/lib/perl5/CORE
90
91or maybe something like
92
93 /usr/opt/perl5/CORE
94
95Execute this statement for a hint about where to find CORE:
96
96dbc785 97 perl -MConfig -e 'print $Config{archlib}'
cb1a09d0 98
54310121 99Here's how you'd compile the example in the next section,
8a7dc658 100L<Adding a Perl interpreter to your C program>, on my Linux box:
cb1a09d0 101
54310121 102 % gcc -O2 -Dbool=char -DHAS_BOOL -I/usr/local/include
8a7dc658 103 -I/usr/local/lib/perl5/i586-linux/5.003/CORE
54310121 104 -L/usr/local/lib/perl5/i586-linux/5.003/CORE
8a7dc658 105 -o interp interp.c -lperl -lm
cb1a09d0 106
54310121 107(That's all one line.) On my DEC Alpha running 5.003_05, the incantation
8a7dc658 108is a bit different:
109
54310121 110 % cc -O2 -Olimit 2900 -DSTANDARD_C -I/usr/local/include
111 -I/usr/local/lib/perl5/alpha-dec_osf/5.00305/CORE
112 -L/usr/local/lib/perl5/alpha-dec_osf/5.00305/CORE -L/usr/local/lib
8a7dc658 113 -D__LANGUAGE_C__ -D_NO_PROTO -o interp interp.c -lperl -lm
114
115How can you figure out what to add? Assuming your Perl is post-5.001,
116execute a C<perl -V> command and pay special attention to the "cc" and
54310121 117"ccflags" information.
8a7dc658 118
54310121 119You'll have to choose the appropriate compiler (I<cc>, I<gcc>, et al.) for
8a7dc658 120your machine: C<perl -MConfig -e 'print $Config{cc}'> will tell you what
54310121 121to use.
8a7dc658 122
123You'll also have to choose the appropriate library directory
124(I</usr/local/lib/...>) for your machine. If your compiler complains
125that certain functions are undefined, or that it can't locate
126I<-lperl>, then you need to change the path following the C<-L>. If it
127complains that it can't find I<EXTERN.h> and I<perl.h>, you need to
128change the path following the C<-I>.
cb1a09d0 129
130You may have to add extra libraries as well. Which ones?
96dbc785 131Perhaps those printed by
132
133 perl -MConfig -e 'print $Config{libs}'
134
54310121 135Provided your perl binary was properly configured and installed the
8a7dc658 136B<ExtUtils::Embed> module will determine all of this information for
137you:
96dbc785 138
139 % cc -o interp interp.c `perl -MExtUtils::Embed -e ccopts -e ldopts`
140
8a7dc658 141If the B<ExtUtils::Embed> module isn't part of your Perl distribution,
142you can retrieve it from
143http://www.perl.com/perl/CPAN/modules/by-module/ExtUtils::Embed. (If
144this documentation came from your Perl distribution, then you're
145running 5.004 or better and you already have it.)
96dbc785 146
8a7dc658 147The B<ExtUtils::Embed> kit on CPAN also contains all source code for
54310121 148the examples in this document, tests, additional examples and other
8a7dc658 149information you may find useful.
cb1a09d0 150
151=head2 Adding a Perl interpreter to your C program
152
153In a sense, perl (the C program) is a good example of embedding Perl
154(the language), so I'll demonstrate embedding with I<miniperlmain.c>,
54310121 155from the source distribution. Here's a bastardized, nonportable
8a7dc658 156version of I<miniperlmain.c> containing the essentials of embedding:
cb1a09d0 157
cb1a09d0 158 #include <EXTERN.h> /* from the Perl distribution */
159 #include <perl.h> /* from the Perl distribution */
96dbc785 160
cb1a09d0 161 static PerlInterpreter *my_perl; /*** The Perl interpreter ***/
96dbc785 162
c07a80fd 163 int main(int argc, char **argv, char **env)
cb1a09d0 164 {
165 my_perl = perl_alloc();
166 perl_construct(my_perl);
96dbc785 167 perl_parse(my_perl, NULL, argc, argv, (char **)NULL);
cb1a09d0 168 perl_run(my_perl);
169 perl_destruct(my_perl);
170 perl_free(my_perl);
171 }
172
8a7dc658 173Notice that we don't use the C<env> pointer. Normally handed to
174C<perl_parse> as its final argument, C<env> here is replaced by
175C<NULL>, which means that the current environment will be used.
96dbc785 176
cb1a09d0 177Now compile this program (I'll call it I<interp.c>) into an executable:
178
96dbc785 179 % cc -o interp interp.c `perl -MExtUtils::Embed -e ccopts -e ldopts`
cb1a09d0 180
181After a successful compilation, you'll be able to use I<interp> just
182like perl itself:
183
184 % interp
185 print "Pretty Good Perl \n";
186 print "10890 - 9801 is ", 10890 - 9801;
187 <CTRL-D>
188 Pretty Good Perl
189 10890 - 9801 is 1089
190
191or
192
193 % interp -e 'printf("%x", 3735928559)'
194 deadbeef
195
196You can also read and execute Perl statements from a file while in the
197midst of your C program, by placing the filename in I<argv[1]> before
96dbc785 198calling I<perl_run()>.
cb1a09d0 199
200=head2 Calling a Perl subroutine from your C program
201
8ebc5c01 202To call individual Perl subroutines, you can use any of the B<perl_call_*>
54310121 203functions documented in the L<perlcall> manpage.
8ebc5c01 204In this example we'll use I<perl_call_argv>.
cb1a09d0 205
206That's shown below, in a program I'll call I<showtime.c>.
207
cb1a09d0 208 #include <EXTERN.h>
96dbc785 209 #include <perl.h>
210
211 static PerlInterpreter *my_perl;
212
c07a80fd 213 int main(int argc, char **argv, char **env)
cb1a09d0 214 {
8ebc5c01 215 char *args[] = { NULL };
cb1a09d0 216 my_perl = perl_alloc();
217 perl_construct(my_perl);
96dbc785 218
219 perl_parse(my_perl, NULL, argc, argv, NULL);
220
8ebc5c01 221 /*** skipping perl_run() ***/
222
223 perl_call_argv("showtime", G_DISCARD | G_NOARGS, args);
224
cb1a09d0 225 perl_destruct(my_perl);
226 perl_free(my_perl);
227 }
228
229where I<showtime> is a Perl subroutine that takes no arguments (that's the
96dbc785 230I<G_NOARGS>) and for which I'll ignore the return value (that's the
cb1a09d0 231I<G_DISCARD>). Those flags, and others, are discussed in L<perlcall>.
232
233I'll define the I<showtime> subroutine in a file called I<showtime.pl>:
234
235 print "I shan't be printed.";
96dbc785 236
cb1a09d0 237 sub showtime {
238 print time;
239 }
240
241Simple enough. Now compile and run:
242
96dbc785 243 % cc -o showtime showtime.c `perl -MExtUtils::Embed -e ccopts -e ldopts`
244
cb1a09d0 245 % showtime showtime.pl
246 818284590
247
248yielding the number of seconds that elapsed between January 1, 1970
8a7dc658 249(the beginning of the Unix epoch), and the moment I began writing this
cb1a09d0 250sentence.
251
8a7dc658 252In this particular case we don't have to call I<perl_run>, but in
253general it's considered good practice to ensure proper initialization
254of library code, including execution of all object C<DESTROY> methods
255and package C<END {}> blocks.
8ebc5c01 256
8a7dc658 257If you want to pass arguments to the Perl subroutine, you can add
258strings to the C<NULL>-terminated C<args> list passed to
259I<perl_call_argv>. For other data types, or to examine return values,
260you'll need to manipulate the Perl stack. That's demonstrated in the
261last section of this document: L<Fiddling with the Perl stack from
262your C program>.
cb1a09d0 263
264=head2 Evaluating a Perl statement from your C program
265
8a7dc658 266One way to evaluate pieces of Perl code is to use
267L<perlguts/perl_eval_sv()>. We've wrapped this inside our own
268I<perl_eval()> function, which converts a command string to an SV,
269passing this and the L<perlcall/G_DISCARD> flag to
270L<perlguts/perl_eval_sv()>.
cb1a09d0 271
272Arguably, this is the only routine you'll ever need to execute
273snippets of Perl code from within your C program. Your string can be
8a7dc658 274as long as you wish; it can contain multiple statements; it can employ
275L<perlfunc/use>, L<perlfunc/require> and L<perlfunc/do> to include
276external Perl files.
cb1a09d0 277
96dbc785 278Our I<perl_eval()> lets us evaluate individual Perl strings, and then
279extract variables for coercion into C types. The following program,
cb1a09d0 280I<string.c>, executes three Perl strings, extracting an C<int> from
281the first, a C<float> from the second, and a C<char *> from the third.
282
cb1a09d0 283 #include <EXTERN.h>
284 #include <perl.h>
96dbc785 285
cb1a09d0 286 static PerlInterpreter *my_perl;
96dbc785 287
a6006777 288 I32 perl_eval(char *string)
cb1a09d0 289 {
a6006777 290 return perl_eval_sv(newSVpv(string,0), G_DISCARD);
cb1a09d0 291 }
96dbc785 292
c07a80fd 293 main (int argc, char **argv, char **env)
cb1a09d0 294 {
a6006777 295 char *embedding[] = { "", "-e", "0" };
cb1a09d0 296 STRLEN length;
96dbc785 297
cb1a09d0 298 my_perl = perl_alloc();
299 perl_construct( my_perl );
96dbc785 300
301 perl_parse(my_perl, NULL, 3, embedding, NULL);
8ebc5c01 302 perl_run(my_perl);
cb1a09d0 303 /** Treat $a as an integer **/
304 perl_eval("$a = 3; $a **= 2");
305 printf("a = %d\n", SvIV(perl_get_sv("a", FALSE)));
96dbc785 306
cb1a09d0 307 /** Treat $a as a float **/
308 perl_eval("$a = 3.14; $a **= 2");
309 printf("a = %f\n", SvNV(perl_get_sv("a", FALSE)));
96dbc785 310
cb1a09d0 311 /** Treat $a as a string **/
312 perl_eval("$a = 'rekcaH lreP rehtonA tsuJ'; $a = reverse($a); ");
313 printf("a = %s\n", SvPV(perl_get_sv("a", FALSE), length));
96dbc785 314
cb1a09d0 315 perl_destruct(my_perl);
316 perl_free(my_perl);
317 }
318
319All of those strange functions with I<sv> in their names help convert Perl scalars to C types. They're described in L<perlguts>.
320
321If you compile and run I<string.c>, you'll see the results of using
322I<SvIV()> to create an C<int>, I<SvNV()> to create a C<float>, and
323I<SvPV()> to create a string:
324
325 a = 9
326 a = 9.859600
327 a = Just Another Perl Hacker
328
8f183262 329In the example above, we've created a global variable to temporarily
330store the computed value of our eval'd expression. It is also
331possible and in most cases a better strategy to fetch the return value
332from L<perl_eval_sv> instead. Example:
333
334 SV *perl_eval(char *string, int croak_on_error)
335 {
336 dSP;
337 SV *sv = newSVpv(string,0);
338
339 PUSHMARK(sp);
340 perl_eval_sv(sv, G_SCALAR);
341 SvREFCNT_dec(sv);
342
343 SPAGAIN;
344 sv = POPs;
345 PUTBACK;
346
347 if (croak_on_error && SvTRUE(GvSV(errgv)))
348 croak(SvPV(GvSV(errgv),na));
349
350 return sv;
351 }
352 ...
353 SV *val = perl_eval("reverse 'rekcaH lreP rehtonA tsuJ'", TRUE);
354 printf("%s\n", SvPV(val,na));
355 ...
356
357This way, we avoid namespace pollution by not creating global
358variables and we've simplified our code as well.
cb1a09d0 359
360=head2 Performing Perl pattern matches and substitutions from your C program
361
362Our I<perl_eval()> lets us evaluate strings of Perl code, so we can
363define some functions that use it to "specialize" in matches and
364substitutions: I<match()>, I<substitute()>, and I<matches()>.
365
96dbc785 366 char match(char *string, char *pattern);
cb1a09d0 367
8a7dc658 368Given a string and a pattern (e.g., C<m/clasp/> or C</\b\w*\b/>, which
369in your C program might appear as "/\\b\\w*\\b/"), match()
cb1a09d0 370returns 1 if the string matches the pattern and 0 otherwise.
371
cb1a09d0 372 int substitute(char *string[], char *pattern);
373
8a7dc658 374Given a pointer to a string and an C<=~> operation (e.g.,
375C<s/bob/robert/g> or C<tr[A-Z][a-z]>), substitute() modifies the string
376according to the operation, returning the number of substitutions
377made.
cb1a09d0 378
379 int matches(char *string, char *pattern, char **matches[]);
380
381Given a string, a pattern, and a pointer to an empty array of strings,
8a7dc658 382matches() evaluates C<$string =~ $pattern> in an array context, and
383fills in I<matches> with the array elements (allocating memory as it
384does so), returning the number of matches found.
cb1a09d0 385
96dbc785 386Here's a sample program, I<match.c>, that uses all three (long lines have
387been wrapped here):
cb1a09d0 388
cb1a09d0 389 #include <EXTERN.h>
390 #include <perl.h>
8a7dc658 391
cb1a09d0 392 static PerlInterpreter *my_perl;
a6006777 393 I32 perl_eval(char *string)
cb1a09d0 394 {
a6006777 395 return perl_eval_sv(newSVpv(string,0), G_DISCARD);
cb1a09d0 396 }
cb1a09d0 397 /** match(string, pattern)
96dbc785 398 **
399 ** Used for matches in a scalar context.
400 **
401 ** Returns 1 if the match was successful; 0 otherwise.
402 **/
403 char match(char *string, char *pattern)
cb1a09d0 404 {
405 char *command;
406 command = malloc(sizeof(char) * strlen(string) + strlen(pattern) + 37);
96dbc785 407 sprintf(command, "$string = '%s'; $return = $string =~ %s",
8ebc5c01 408 string, pattern);
cb1a09d0 409 perl_eval(command);
410 free(command);
411 return SvIV(perl_get_sv("return", FALSE));
412 }
cb1a09d0 413 /** substitute(string, pattern)
96dbc785 414 **
415 ** Used for =~ operations that modify their left-hand side (s/// and tr///)
416 **
417 ** Returns the number of successful matches, and
418 ** modifies the input string if there were any.
419 **/
420 int substitute(char *string[], char *pattern)
cb1a09d0 421 {
422 char *command;
423 STRLEN length;
424 command = malloc(sizeof(char) * strlen(*string) + strlen(pattern) + 35);
96dbc785 425 sprintf(command, "$string = '%s'; $ret = ($string =~ %s)",
8ebc5c01 426 *string, pattern);
427 perl_eval(command);
428 free(command);
429 *string = SvPV(perl_get_sv("string", FALSE), length);
430 return SvIV(perl_get_sv("ret", FALSE));
cb1a09d0 431 }
cb1a09d0 432 /** matches(string, pattern, matches)
96dbc785 433 **
434 ** Used for matches in an array context.
435 **
436 ** Returns the number of matches,
437 ** and fills in **matches with the matching substrings (allocates memory!)
438 **/
439 int matches(char *string, char *pattern, char **match_list[])
cb1a09d0 440 {
441 char *command;
442 SV *current_match;
443 AV *array;
444 I32 num_matches;
445 STRLEN length;
446 int i;
cb1a09d0 447 command = malloc(sizeof(char) * strlen(string) + strlen(pattern) + 38);
96dbc785 448 sprintf(command, "$string = '%s'; @array = ($string =~ %s)",
8ebc5c01 449 string, pattern);
cb1a09d0 450 perl_eval(command);
451 free(command);
452 array = perl_get_av("array", FALSE);
453 num_matches = av_len(array) + 1; /** assume $[ is 0 **/
96dbc785 454 *match_list = (char **) malloc(sizeof(char *) * num_matches);
455 for (i = 0; i <= num_matches; i++) {
cb1a09d0 456 current_match = av_shift(array);
96dbc785 457 (*match_list)[i] = SvPV(current_match, length);
cb1a09d0 458 }
459 return num_matches;
460 }
c07a80fd 461 main (int argc, char **argv, char **env)
cb1a09d0 462 {
a6006777 463 char *embedding[] = { "", "-e", "0" };
96dbc785 464 char *text, **match_list;
cb1a09d0 465 int num_matches, i;
466 int j;
cb1a09d0 467 my_perl = perl_alloc();
468 perl_construct( my_perl );
96dbc785 469 perl_parse(my_perl, NULL, 3, embedding, NULL);
8ebc5c01 470 perl_run(my_perl);
471
cb1a09d0 472 text = (char *) malloc(sizeof(char) * 486); /** A long string follows! **/
96dbc785 473 sprintf(text, "%s", "When he is at a convenience store and the bill \
474 comes to some amount like 76 cents, Maynard is aware that there is \
475 something he *should* do, something that will enable him to get back \
476 a quarter, but he has no idea *what*. He fumbles through his red \
477 squeezey changepurse and gives the boy three extra pennies with his \
478 dollar, hoping that he might luck into the correct amount. The boy \
479 gives him back two of his own pennies and then the big shiny quarter \
480 that is his prize. -RICHH");
481 if (match(text, "m/quarter/")) /** Does text contain 'quarter'? **/
482 printf("match: Text contains the word 'quarter'.\n\n");
483 else
484 printf("match: Text doesn't contain the word 'quarter'.\n\n");
485 if (match(text, "m/eighth/")) /** Does text contain 'eighth'? **/
486 printf("match: Text contains the word 'eighth'.\n\n");
487 else
488 printf("match: Text doesn't contain the word 'eighth'.\n\n");
489 /** Match all occurrences of /wi../ **/
490 num_matches = matches(text, "m/(wi..)/g", &match_list);
491 printf("matches: m/(wi..)/g found %d matches...\n", num_matches);
492 for (i = 0; i < num_matches; i++)
493 printf("match: %s\n", match_list[i]);
cb1a09d0 494 printf("\n");
495 for (i = 0; i < num_matches; i++) {
96dbc785 496 free(match_list[i]);
cb1a09d0 497 }
96dbc785 498 free(match_list);
499 /** Remove all vowels from text **/
500 num_matches = substitute(&text, "s/[aeiou]//gi");
cb1a09d0 501 if (num_matches) {
96dbc785 502 printf("substitute: s/[aeiou]//gi...%d substitutions made.\n",
8ebc5c01 503 num_matches);
cb1a09d0 504 printf("Now text is: %s\n\n", text);
505 }
96dbc785 506 /** Attempt a substitution **/
507 if (!substitute(&text, "s/Perl/C/")) {
508 printf("substitute: s/Perl/C...No substitution made.\n\n");
cb1a09d0 509 }
cb1a09d0 510 free(text);
cb1a09d0 511 perl_destruct(my_perl);
512 perl_free(my_perl);
513 }
514
96dbc785 515which produces the output (again, long lines have been wrapped here)
cb1a09d0 516
8a7dc658 517 match: Text contains the word 'quarter'.
96dbc785 518
8a7dc658 519 match: Text doesn't contain the word 'eighth'.
96dbc785 520
8a7dc658 521 matches: m/(wi..)/g found 2 matches...
cb1a09d0 522 match: will
523 match: with
96dbc785 524
8a7dc658 525 substitute: s/[aeiou]//gi...139 substitutions made.
54310121 526 Now text is: Whn h s t cnvnnc str nd th bll cms t sm mnt lk 76 cnts,
96dbc785 527 Mynrd s wr tht thr s smthng h *shld* d, smthng tht wll nbl hm t gt bck
528 qrtr, bt h hs n d *wht*. H fmbls thrgh hs rd sqzy chngprs nd gvs th by
529 thr xtr pnns wth hs dllr, hpng tht h mght lck nt th crrct mnt. Th by gvs
530 hm bck tw f hs wn pnns nd thn th bg shny qrtr tht s hs prz. -RCHH
531
8a7dc658 532 substitute: s/Perl/C...No substitution made.
96dbc785 533
cb1a09d0 534=head2 Fiddling with the Perl stack from your C program
535
536When trying to explain stacks, most computer science textbooks mumble
537something about spring-loaded columns of cafeteria plates: the last
538thing you pushed on the stack is the first thing you pop off. That'll
539do for our purposes: your C program will push some arguments onto "the Perl
540stack", shut its eyes while some magic happens, and then pop the
541results--the return value of your Perl subroutine--off the stack.
96dbc785 542
cb1a09d0 543First you'll need to know how to convert between C types and Perl
544types, with newSViv() and sv_setnv() and newAV() and all their
545friends. They're described in L<perlguts>.
546
547Then you'll need to know how to manipulate the Perl stack. That's
548described in L<perlcall>.
549
96dbc785 550Once you've understood those, embedding Perl in C is easy.
cb1a09d0 551
54310121 552Because C has no builtin function for integer exponentiation, let's
cb1a09d0 553make Perl's ** operator available to it (this is less useful than it
5f05dabc 554sounds, because Perl implements ** with C's I<pow()> function). First
cb1a09d0 555I'll create a stub exponentiation function in I<power.pl>:
556
557 sub expo {
558 my ($a, $b) = @_;
559 return $a ** $b;
560 }
561
562Now I'll create a C program, I<power.c>, with a function
563I<PerlPower()> that contains all the perlguts necessary to push the
564two arguments into I<expo()> and to pop the return value out. Take a
565deep breath...
566
cb1a09d0 567 #include <EXTERN.h>
568 #include <perl.h>
96dbc785 569
cb1a09d0 570 static PerlInterpreter *my_perl;
96dbc785 571
cb1a09d0 572 static void
573 PerlPower(int a, int b)
574 {
575 dSP; /* initialize stack pointer */
576 ENTER; /* everything created after here */
577 SAVETMPS; /* ...is a temporary variable. */
578 PUSHMARK(sp); /* remember the stack pointer */
579 XPUSHs(sv_2mortal(newSViv(a))); /* push the base onto the stack */
580 XPUSHs(sv_2mortal(newSViv(b))); /* push the exponent onto stack */
581 PUTBACK; /* make local stack pointer global */
582 perl_call_pv("expo", G_SCALAR); /* call the function */
583 SPAGAIN; /* refresh stack pointer */
584 /* pop the return value from stack */
585 printf ("%d to the %dth power is %d.\n", a, b, POPi);
96dbc785 586 PUTBACK;
cb1a09d0 587 FREETMPS; /* free that return value */
588 LEAVE; /* ...and the XPUSHed "mortal" args.*/
589 }
96dbc785 590
591 int main (int argc, char **argv, char **env)
cb1a09d0 592 {
593 char *my_argv[2];
96dbc785 594
cb1a09d0 595 my_perl = perl_alloc();
596 perl_construct( my_perl );
96dbc785 597
cb1a09d0 598 my_argv[1] = (char *) malloc(10);
599 sprintf(my_argv[1], "power.pl");
96dbc785 600
601 perl_parse(my_perl, NULL, argc, my_argv, NULL);
8ebc5c01 602 perl_run(my_perl);
96dbc785 603
cb1a09d0 604 PerlPower(3, 4); /*** Compute 3 ** 4 ***/
96dbc785 605
cb1a09d0 606 perl_destruct(my_perl);
607 perl_free(my_perl);
608 }
96dbc785 609
cb1a09d0 610
611
612Compile and run:
613
96dbc785 614 % cc -o power power.c `perl -MExtUtils::Embed -e ccopts -e ldopts`
615
616 % power
cb1a09d0 617 3 to the 4th power is 81.
618
a6006777 619=head2 Maintaining a persistent interpreter
620
8a7dc658 621When developing interactive and/or potentially long-running
622applications, it's a good idea to maintain a persistent interpreter
623rather than allocating and constructing a new interpreter multiple
624times. The major reason is speed: since Perl will only be loaded into
54310121 625memory once.
8a7dc658 626
627However, you have to be more cautious with namespace and variable
628scoping when using a persistent interpreter. In previous examples
629we've been using global variables in the default package C<main>. We
630knew exactly what code would be run, and assumed we could avoid
631variable collisions and outrageous symbol table growth.
632
633Let's say your application is a server that will occasionally run Perl
634code from some arbitrary file. Your server has no way of knowing what
635code it's going to run. Very dangerous.
636
637If the file is pulled in by C<perl_parse()>, compiled into a newly
638constructed interpreter, and subsequently cleaned out with
639C<perl_destruct()> afterwards, you're shielded from most namespace
640troubles.
641
642One way to avoid namespace collisions in this scenario is to translate
643the filename into a guaranteed-unique package name, and then compile
644the code into that package using L<perlfunc/eval>. In the example
645below, each file will only be compiled once. Or, the application
646might choose to clean out the symbol table associated with the file
647after it's no longer needed. Using L<perlcall/perl_call_argv>, We'll
648call the subroutine C<Embed::Persistent::eval_file> which lives in the
649file C<persistent.pl> and pass the filename and boolean cleanup/cache
a6006777 650flag as arguments.
651
8a7dc658 652Note that the process will continue to grow for each file that it
653uses. In addition, there might be C<AUTOLOAD>ed subroutines and other
654conditions that cause Perl's symbol table to grow. You might want to
655add some logic that keeps track of the process size, or restarts
656itself after a certain number of requests, to ensure that memory
657consumption is minimized. You'll also want to scope your variables
658with L<perlfunc/my> whenever possible.
a6006777 659
54310121 660
a6006777 661 package Embed::Persistent;
662 #persistent.pl
54310121 663
a6006777 664 use strict;
665 use vars '%Cache';
54310121 666
a6006777 667 sub valid_package_name {
668 my($string) = @_;
669 $string =~ s/([^A-Za-z0-9\/])/sprintf("_%2x",unpack("C",$1))/eg;
670 # second pass only for words starting with a digit
671 $string =~ s|/(\d)|sprintf("/_%2x",unpack("C",$1))|eg;
54310121 672
a6006777 673 # Dress it up as a real package name
674 $string =~ s|/|::|g;
675 return "Embed" . $string;
676 }
54310121 677
a6006777 678 #borrowed from Safe.pm
679 sub delete_package {
680 my $pkg = shift;
681 my ($stem, $leaf);
54310121 682
a6006777 683 no strict 'refs';
8ebc5c01 684 $pkg = "main::$pkg\::"; # expand to full symbol table name
a6006777 685 ($stem, $leaf) = $pkg =~ m/(.*::)(\w+::)$/;
54310121 686
a6006777 687 my $stem_symtab = *{$stem}{HASH};
54310121 688
a6006777 689 delete $stem_symtab->{$leaf};
690 }
54310121 691
a6006777 692 sub eval_file {
693 my($filename, $delete) = @_;
694 my $package = valid_package_name($filename);
695 my $mtime = -M $filename;
696 if(defined $Cache{$package}{mtime}
697 &&
54310121 698 $Cache{$package}{mtime} <= $mtime)
a6006777 699 {
54310121 700 # we have compiled this subroutine already,
8ebc5c01 701 # it has not been updated on disk, nothing left to do
702 print STDERR "already compiled $package->handler\n";
a6006777 703 }
704 else {
8ebc5c01 705 local *FH;
706 open FH, $filename or die "open '$filename' $!";
707 local($/) = undef;
708 my $sub = <FH>;
709 close FH;
54310121 710
8ebc5c01 711 #wrap the code into a subroutine inside our unique package
712 my $eval = qq{package $package; sub handler { $sub; }};
713 {
714 # hide our variables within this block
715 my($filename,$mtime,$package,$sub);
716 eval $eval;
717 }
718 die $@ if $@;
54310121 719
8ebc5c01 720 #cache it unless we're cleaning out each time
721 $Cache{$package}{mtime} = $mtime unless $delete;
a6006777 722 }
54310121 723
a6006777 724 eval {$package->handler;};
725 die $@ if $@;
54310121 726
a6006777 727 delete_package($package) if $delete;
54310121 728
a6006777 729 #take a look if you want
730 #print Devel::Symdump->rnew($package)->as_string, $/;
731 }
54310121 732
a6006777 733 1;
54310121 734
a6006777 735 __END__
736
737 /* persistent.c */
54310121 738 #include <EXTERN.h>
739 #include <perl.h>
740
a6006777 741 /* 1 = clean out filename's symbol table after each request, 0 = don't */
742 #ifndef DO_CLEAN
743 #define DO_CLEAN 0
744 #endif
54310121 745
a6006777 746 static PerlInterpreter *perl = NULL;
54310121 747
a6006777 748 int
749 main(int argc, char **argv, char **env)
750 {
751 char *embedding[] = { "", "persistent.pl" };
752 char *args[] = { "", DO_CLEAN, NULL };
753 char filename [1024];
754 int exitstatus = 0;
54310121 755
a6006777 756 if((perl = perl_alloc()) == NULL) {
8ebc5c01 757 fprintf(stderr, "no memory!");
758 exit(1);
a6006777 759 }
54310121 760 perl_construct(perl);
761
a6006777 762 exitstatus = perl_parse(perl, NULL, 2, embedding, NULL);
54310121 763
764 if(!exitstatus) {
8ebc5c01 765 exitstatus = perl_run(perl);
54310121 766
8ebc5c01 767 while(printf("Enter file name: ") && gets(filename)) {
54310121 768
8ebc5c01 769 /* call the subroutine, passing it the filename as an argument */
770 args[0] = filename;
54310121 771 perl_call_argv("Embed::Persistent::eval_file",
8ebc5c01 772 G_DISCARD | G_EVAL, args);
54310121 773
8ebc5c01 774 /* check $@ */
54310121 775 if(SvTRUE(GvSV(errgv)))
8ebc5c01 776 fprintf(stderr, "eval error: %s\n", SvPV(GvSV(errgv),na));
777 }
a6006777 778 }
54310121 779
a6006777 780 perl_destruct_level = 0;
54310121 781 perl_destruct(perl);
782 perl_free(perl);
a6006777 783 exit(exitstatus);
784 }
785
a6006777 786Now compile:
787
54310121 788 % cc -o persistent persistent.c `perl -MExtUtils::Embed -e ccopts -e ldopts`
a6006777 789
790Here's a example script file:
791
792 #test.pl
793 my $string = "hello";
794 foo($string);
795
796 sub foo {
797 print "foo says: @_\n";
798 }
799
800Now run:
801
802 % persistent
803 Enter file name: test.pl
804 foo says: hello
805 Enter file name: test.pl
806 already compiled Embed::test_2epl->handler
807 foo says: hello
808 Enter file name: ^C
809
8ebc5c01 810=head2 Maintaining multiple interpreter instances
811
8a7dc658 812Some rare applications will need to create more than one interpreter
813during a session. Such an application might sporadically decide to
54310121 814release any resources associated with the interpreter.
8a7dc658 815
816The program must take care to ensure that this takes place I<before>
817the next interpreter is constructed. By default, the global variable
818C<perl_destruct_level> is set to C<0>, since extra cleaning isn't
819needed when a program has only one interpreter.
820
821Setting C<perl_destruct_level> to C<1> makes everything squeaky clean:
822
54310121 823 perl_destruct_level = 1;
8ebc5c01 824
8ebc5c01 825 while(1) {
826 ...
827 /* reset global variables here with perl_destruct_level = 1 */
54310121 828 perl_construct(my_perl);
8ebc5c01 829 ...
830 /* clean and reset _everything_ during perl_destruct */
54310121 831 perl_destruct(my_perl);
832 perl_free(my_perl);
8ebc5c01 833 ...
834 /* let's go do it again! */
835 }
836
54310121 837When I<perl_destruct()> is called, the interpreter's syntax parse tree
838and symbol tables are cleaned up, and global variables are reset.
8ebc5c01 839
8a7dc658 840Now suppose we have more than one interpreter instance running at the
841same time. This is feasible, but only if you used the
842C<-DMULTIPLICITY> flag when building Perl. By default, that sets
843C<perl_destruct_level> to C<1>.
8ebc5c01 844
845Let's give it a try:
846
847
848 #include <EXTERN.h>
8a7dc658 849 #include <perl.h>
8ebc5c01 850
851 /* we're going to embed two interpreters */
852 /* we're going to embed two interpreters */
853
8ebc5c01 854 #define SAY_HELLO "-e", "print qq(Hi, I'm $^X\n)"
855
8ebc5c01 856 int main(int argc, char **argv, char **env)
857 {
54310121 858 PerlInterpreter
8ebc5c01 859 *one_perl = perl_alloc(),
54310121 860 *two_perl = perl_alloc();
8ebc5c01 861 char *one_args[] = { "one_perl", SAY_HELLO };
862 char *two_args[] = { "two_perl", SAY_HELLO };
863
864 perl_construct(one_perl);
865 perl_construct(two_perl);
866
867 perl_parse(one_perl, NULL, 3, one_args, (char **)NULL);
868 perl_parse(two_perl, NULL, 3, two_args, (char **)NULL);
869
870 perl_run(one_perl);
871 perl_run(two_perl);
872
873 perl_destruct(one_perl);
874 perl_destruct(two_perl);
875
876 perl_free(one_perl);
877 perl_free(two_perl);
878 }
879
880
881Compile as usual:
882
883 % cc -o multiplicity multiplicity.c `perl -MExtUtils::Embed -e ccopts -e ldopts`
884
885Run it, Run it:
886
887 % multiplicity
888 Hi, I'm one_perl
889 Hi, I'm two_perl
890
96dbc785 891=head2 Using Perl modules, which themselves use C libraries, from your C program
892
893If you've played with the examples above and tried to embed a script
894that I<use()>s a Perl module (such as I<Socket>) which itself uses a C or C++ library,
895this probably happened:
896
897
898 Can't load module Socket, dynamic loading not available in this perl.
899 (You may need to build a new perl executable which either supports
900 dynamic loading or has the Socket module statically linked into it.)
901
902
903What's wrong?
904
905Your interpreter doesn't know how to communicate with these extensions
906on its own. A little glue will help. Up until now you've been
907calling I<perl_parse()>, handing it NULL for the second argument:
908
909 perl_parse(my_perl, NULL, argc, my_argv, NULL);
910
911That's where the glue code can be inserted to create the initial contact between
912Perl and linked C/C++ routines. Let's take a look some pieces of I<perlmain.c>
913to see how Perl does this:
914
915
916 #ifdef __cplusplus
917 # define EXTERN_C extern "C"
918 #else
919 # define EXTERN_C extern
920 #endif
921
922 static void xs_init _((void));
923
924 EXTERN_C void boot_DynaLoader _((CV* cv));
925 EXTERN_C void boot_Socket _((CV* cv));
926
927
928 EXTERN_C void
929 xs_init()
930 {
931 char *file = __FILE__;
932 /* DynaLoader is a special case */
933 newXS("DynaLoader::boot_DynaLoader", boot_DynaLoader, file);
934 newXS("Socket::bootstrap", boot_Socket, file);
935 }
936
937Simply put: for each extension linked with your Perl executable
938(determined during its initial configuration on your
939computer or when adding a new extension),
940a Perl subroutine is created to incorporate the extension's
941routines. Normally, that subroutine is named
942I<Module::bootstrap()> and is invoked when you say I<use Module>. In
943turn, this hooks into an XSUB, I<boot_Module>, which creates a Perl
944counterpart for each of the extension's XSUBs. Don't worry about this
945part; leave that to the I<xsubpp> and extension authors. If your
946extension is dynamically loaded, DynaLoader creates I<Module::bootstrap()>
947for you on the fly. In fact, if you have a working DynaLoader then there
5f05dabc 948is rarely any need to link in any other extensions statically.
96dbc785 949
950
951Once you have this code, slap it into the second argument of I<perl_parse()>:
952
953
954 perl_parse(my_perl, xs_init, argc, my_argv, NULL);
955
956
957Then compile:
958
8a7dc658 959 % cc -o interp interp.c `perl -MExtUtils::Embed -e ccopts -e ldopts`
96dbc785 960
961 % interp
962 use Socket;
963 use SomeDynamicallyLoadedModule;
964
965 print "Now I can use extensions!\n"'
966
967B<ExtUtils::Embed> can also automate writing the I<xs_init> glue code.
968
8a7dc658 969 % perl -MExtUtils::Embed -e xsinit -- -o perlxsi.c
96dbc785 970 % cc -c perlxsi.c `perl -MExtUtils::Embed -e ccopts`
971 % cc -c interp.c `perl -MExtUtils::Embed -e ccopts`
8a7dc658 972 % cc -o interp perlxsi.o interp.o `perl -MExtUtils::Embed -e ldopts`
96dbc785 973
974Consult L<perlxs> and L<perlguts> for more details.
975
976
cb1a09d0 977=head1 MORAL
978
979You can sometimes I<write faster code> in C, but
5f05dabc 980you can always I<write code faster> in Perl. Because you can use
cb1a09d0 981each from the other, combine them as you wish.
982
983
984=head1 AUTHOR
985
9607fc9c 986Jon Orwant and <F<orwant@tpj.com>> and Doug MacEachern <F<dougm@osf.org>>,
987with small contributions from Tim Bunce, Tom Christiansen, Hallvard Furuseth,
988Dov Grobgeld, and Ilya Zakharevich.
8a7dc658 989
990Check out Doug's article on embedding in Volume 1, Issue 4 of The Perl
991Journal. Info about TPJ is available from http://tpj.com.
cb1a09d0 992
8a7dc658 993February 1, 1997
cb1a09d0 994
8a7dc658 995Some of this material is excerpted from Jon Orwant's book: I<Perl 5
996Interactive>, Waite Group Press, 1996 (ISBN 1-57169-064-6) and appears
cb1a09d0 997courtesy of Waite Group Press.
8a7dc658 998
999=head1 COPYRIGHT
1000
1001Copyright (C) 1995, 1996, 1997 Doug MacEachern and Jon Orwant. All
1002Rights Reserved.
1003
1004Although destined for release with the standard Perl distribution,
1005this document is not public domain, nor is any of Perl and its
1006documentation. Permission is granted to freely distribute verbatim
1007copies of this document provided that no modifications outside of
1008formatting be made, and that this notice remain intact. You are
1009permitted and encouraged to use its code and derivatives thereof in
1010your own source code for fun or for profit as you see fit.