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