This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perldelta for 2384afee9 / #123553
[perl5.git] / pod / perlembed.pod
CommitLineData
a0d0e21e
LW
1=head1 NAME
2
cb1a09d0 3perlembed - how to embed perl in your C program
a0d0e21e
LW
4
5=head1 DESCRIPTION
6
cb1a09d0
AD
7=head2 PREAMBLE
8
9Do you want to:
10
11=over 5
12
96dbc785 13=item B<Use C from Perl?>
cb1a09d0 14
4929bf7b 15Read L<perlxstut>, L<perlxs>, L<h2xs>, L<perlguts>, and L<perlapi>.
cb1a09d0 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
5e6bcc01 23Read about L<perlfunc/do> and L<perlfunc/eval> and L<perlfunc/require>
e010571f 24and L<perlfunc/use>.
cb1a09d0 25
96dbc785 26=item B<Use C from C?>
cb1a09d0
AD
27
28Rethink your design.
29
96dbc785 30=item B<Use Perl from C?>
cb1a09d0
AD
31
32Read on...
33
34=back
35
36=head2 ROADMAP
37
707102d0
GS
38=over 5
39
551e1d92 40=item *
cb1a09d0 41
551e1d92 42Compiling your C program
cb1a09d0 43
551e1d92 44=item *
cb1a09d0 45
551e1d92 46Adding a Perl interpreter to your C program
cb1a09d0 47
551e1d92 48=item *
cb1a09d0 49
551e1d92 50Calling a Perl subroutine from your C program
cb1a09d0 51
551e1d92 52=item *
cb1a09d0 53
551e1d92 54Evaluating a Perl statement from your C program
a6006777 55
551e1d92 56=item *
8ebc5c01 57
551e1d92
RB
58Performing Perl pattern matches and substitutions from your C program
59
60=item *
61
62Fiddling with the Perl stack from your C program
63
64=item *
65
66Maintaining a persistent interpreter
67
68=item *
69
70Maintaining multiple interpreter instances
71
72=item *
73
74Using Perl modules, which themselves use C libraries, from your C program
75
76=item *
77
78Embedding Perl under Win32
96dbc785 79
5e6bcc01 80=back
cb1a09d0
AD
81
82=head2 Compiling your C program
83
8a7dc658
JO
84If you have trouble compiling the scripts in this documentation,
85you're not alone. The cardinal rule: COMPILE THE PROGRAMS IN EXACTLY
86THE SAME WAY THAT YOUR PERL WAS COMPILED. (Sorry for yelling.)
cb1a09d0 87
8a7dc658 88Also, every C program that uses Perl must link in the I<perl library>.
cb1a09d0
AD
89What's that, you ask? Perl is itself written in C; the perl library
90is the collection of compiled C programs that were used to create your
91perl executable (I</usr/bin/perl> or equivalent). (Corollary: you
92can't use Perl from your C program unless Perl has been compiled on
93your machine, or installed properly--that's why you shouldn't blithely
94copy Perl executables from machine to machine without also copying the
95I<lib> directory.)
96
8a7dc658
JO
97When you use Perl from C, your C program will--usually--allocate,
98"run", and deallocate a I<PerlInterpreter> object, which is defined by
99the perl library.
cb1a09d0
AD
100
101If your copy of Perl is recent enough to contain this documentation
a6006777 102(version 5.002 or later), then the perl library (and I<EXTERN.h> and
8a7dc658
JO
103I<perl.h>, which you'll also need) will reside in a directory
104that looks like this:
cb1a09d0
AD
105
106 /usr/local/lib/perl5/your_architecture_here/CORE
107
108or perhaps just
109
110 /usr/local/lib/perl5/CORE
111
112or maybe something like
113
114 /usr/opt/perl5/CORE
115
116Execute this statement for a hint about where to find CORE:
117
96dbc785 118 perl -MConfig -e 'print $Config{archlib}'
cb1a09d0 119
54310121 120Here's how you'd compile the example in the next section,
e010571f 121L<Adding a Perl interpreter to your C program>, on my Linux box:
cb1a09d0 122
54310121 123 % gcc -O2 -Dbool=char -DHAS_BOOL -I/usr/local/include
8a7dc658 124 -I/usr/local/lib/perl5/i586-linux/5.003/CORE
54310121 125 -L/usr/local/lib/perl5/i586-linux/5.003/CORE
8a7dc658 126 -o interp interp.c -lperl -lm
cb1a09d0 127
5e6bcc01 128(That's all one line.) On my DEC Alpha running old 5.003_05, the
e010571f 129incantation is a bit different:
8a7dc658 130
54310121 131 % cc -O2 -Olimit 2900 -DSTANDARD_C -I/usr/local/include
132 -I/usr/local/lib/perl5/alpha-dec_osf/5.00305/CORE
133 -L/usr/local/lib/perl5/alpha-dec_osf/5.00305/CORE -L/usr/local/lib
8a7dc658
JO
134 -D__LANGUAGE_C__ -D_NO_PROTO -o interp interp.c -lperl -lm
135
136How can you figure out what to add? Assuming your Perl is post-5.001,
137execute a C<perl -V> command and pay special attention to the "cc" and
54310121 138"ccflags" information.
8a7dc658 139
54310121 140You'll have to choose the appropriate compiler (I<cc>, I<gcc>, et al.) for
8a7dc658 141your machine: C<perl -MConfig -e 'print $Config{cc}'> will tell you what
54310121 142to use.
8a7dc658
JO
143
144You'll also have to choose the appropriate library directory
145(I</usr/local/lib/...>) for your machine. If your compiler complains
146that certain functions are undefined, or that it can't locate
147I<-lperl>, then you need to change the path following the C<-L>. If it
148complains that it can't find I<EXTERN.h> and I<perl.h>, you need to
149change the path following the C<-I>.
cb1a09d0
AD
150
151You may have to add extra libraries as well. Which ones?
96dbc785 152Perhaps those printed by
153
154 perl -MConfig -e 'print $Config{libs}'
155
54310121 156Provided your perl binary was properly configured and installed the
8a7dc658
JO
157B<ExtUtils::Embed> module will determine all of this information for
158you:
96dbc785 159
160 % cc -o interp interp.c `perl -MExtUtils::Embed -e ccopts -e ldopts`
161
8a7dc658
JO
162If the B<ExtUtils::Embed> module isn't part of your Perl distribution,
163you can retrieve it from
f224927c
JH
164http://www.perl.com/perl/CPAN/modules/by-module/ExtUtils/
165(If this documentation came from your Perl distribution, then you're
8a7dc658 166running 5.004 or better and you already have it.)
96dbc785 167
8a7dc658 168The B<ExtUtils::Embed> kit on CPAN also contains all source code for
54310121 169the examples in this document, tests, additional examples and other
8a7dc658 170information you may find useful.
cb1a09d0
AD
171
172=head2 Adding a Perl interpreter to your C program
173
174In a sense, perl (the C program) is a good example of embedding Perl
175(the language), so I'll demonstrate embedding with I<miniperlmain.c>,
353c6505 176included in the source distribution. Here's a bastardized, non-portable
8a7dc658 177version of I<miniperlmain.c> containing the essentials of embedding:
cb1a09d0 178
5e6bcc01
GID
179 #include <EXTERN.h> /* from the Perl distribution */
180 #include <perl.h> /* from the Perl distribution */
96dbc785 181
5e6bcc01 182 static PerlInterpreter *my_perl; /*** The Perl interpreter ***/
96dbc785 183
5e6bcc01
GID
184 int main(int argc, char **argv, char **env)
185 {
1ccffcf5 186 PERL_SYS_INIT3(&argc,&argv,&env);
cb1a09d0
AD
187 my_perl = perl_alloc();
188 perl_construct(my_perl);
d95b23b2 189 PL_exit_flags |= PERL_EXIT_DESTRUCT_END;
96dbc785 190 perl_parse(my_perl, NULL, argc, argv, (char **)NULL);
cb1a09d0
AD
191 perl_run(my_perl);
192 perl_destruct(my_perl);
193 perl_free(my_perl);
1ccffcf5 194 PERL_SYS_TERM();
5e6bcc01 195 }
cb1a09d0 196
8a7dc658
JO
197Notice that we don't use the C<env> pointer. Normally handed to
198C<perl_parse> as its final argument, C<env> here is replaced by
eb533572
DM
199C<NULL>, which means that the current environment will be used.
200
201The macros PERL_SYS_INIT3() and PERL_SYS_TERM() provide system-specific
202tune up of the C runtime environment necessary to run Perl interpreters;
203they should only be called once regardless of how many interpreters you
204create or destroy. Call PERL_SYS_INIT3() before you create your first
205interpreter, and PERL_SYS_TERM() after you free your last interpreter.
206
207Since PERL_SYS_INIT3() may change C<env>, it may be more appropriate to
208provide C<env> as an argument to perl_parse().
96dbc785 209
31f6f5aa
NT
210Also notice that no matter what arguments you pass to perl_parse(),
211PERL_SYS_INIT3() must be invoked on the C main() argc, argv and env and
212only once.
213
cb1a09d0
AD
214Now compile this program (I'll call it I<interp.c>) into an executable:
215
96dbc785 216 % cc -o interp interp.c `perl -MExtUtils::Embed -e ccopts -e ldopts`
cb1a09d0
AD
217
218After a successful compilation, you'll be able to use I<interp> just
219like perl itself:
220
221 % interp
222 print "Pretty Good Perl \n";
223 print "10890 - 9801 is ", 10890 - 9801;
224 <CTRL-D>
225 Pretty Good Perl
226 10890 - 9801 is 1089
227
228or
229
230 % interp -e 'printf("%x", 3735928559)'
231 deadbeef
232
233You can also read and execute Perl statements from a file while in the
234midst of your C program, by placing the filename in I<argv[1]> before
e010571f 235calling I<perl_run>.
cb1a09d0
AD
236
237=head2 Calling a Perl subroutine from your C program
238
4929bf7b 239To call individual Perl subroutines, you can use any of the B<call_*>
7b8d334a 240functions documented in L<perlcall>.
4929bf7b 241In this example we'll use C<call_argv>.
cb1a09d0
AD
242
243That's shown below, in a program I'll call I<showtime.c>.
244
cb1a09d0 245 #include <EXTERN.h>
96dbc785 246 #include <perl.h>
247
248 static PerlInterpreter *my_perl;
249
c07a80fd 250 int main(int argc, char **argv, char **env)
cb1a09d0 251 {
8ebc5c01 252 char *args[] = { NULL };
1ccffcf5 253 PERL_SYS_INIT3(&argc,&argv,&env);
cb1a09d0
AD
254 my_perl = perl_alloc();
255 perl_construct(my_perl);
96dbc785 256
257 perl_parse(my_perl, NULL, argc, argv, NULL);
d95b23b2 258 PL_exit_flags |= PERL_EXIT_DESTRUCT_END;
96dbc785 259
8ebc5c01 260 /*** skipping perl_run() ***/
261
4929bf7b 262 call_argv("showtime", G_DISCARD | G_NOARGS, args);
8ebc5c01 263
cb1a09d0
AD
264 perl_destruct(my_perl);
265 perl_free(my_perl);
1ccffcf5 266 PERL_SYS_TERM();
cb1a09d0
AD
267 }
268
269where I<showtime> is a Perl subroutine that takes no arguments (that's the
96dbc785 270I<G_NOARGS>) and for which I'll ignore the return value (that's the
cb1a09d0
AD
271I<G_DISCARD>). Those flags, and others, are discussed in L<perlcall>.
272
273I'll define the I<showtime> subroutine in a file called I<showtime.pl>:
274
5e6bcc01 275 print "I shan't be printed.";
96dbc785 276
5e6bcc01
GID
277 sub showtime {
278 print time;
279 }
cb1a09d0 280
5e6bcc01 281Simple enough. Now compile and run:
96dbc785 282
5e6bcc01
GID
283 % cc -o showtime showtime.c \
284 `perl -MExtUtils::Embed -e ccopts -e ldopts`
285 % showtime showtime.pl
286 818284590
cb1a09d0
AD
287
288yielding the number of seconds that elapsed between January 1, 1970
8a7dc658 289(the beginning of the Unix epoch), and the moment I began writing this
cb1a09d0
AD
290sentence.
291
5e6bcc01 292In this particular case we don't have to call I<perl_run>, as we set
d95b23b2
AB
293the PL_exit_flag PERL_EXIT_DESTRUCT_END which executes END blocks in
294perl_destruct.
8ebc5c01 295
8a7dc658
JO
296If you want to pass arguments to the Perl subroutine, you can add
297strings to the C<NULL>-terminated C<args> list passed to
4929bf7b 298I<call_argv>. For other data types, or to examine return values,
13a2d996
SP
299you'll need to manipulate the Perl stack. That's demonstrated in
300L<Fiddling with the Perl stack from your C program>.
cb1a09d0
AD
301
302=head2 Evaluating a Perl statement from your C program
303
137443ea 304Perl provides two API functions to evaluate pieces of Perl code.
4929bf7b 305These are L<perlapi/eval_sv> and L<perlapi/eval_pv>.
137443ea 306
307Arguably, these are the only routines you'll ever need to execute
e010571f
GS
308snippets of Perl code from within your C program. Your code can be as
309long as you wish; it can contain multiple statements; it can employ
310L<perlfunc/use>, L<perlfunc/require>, and L<perlfunc/do> to
311include external Perl files.
cb1a09d0 312
4929bf7b 313I<eval_pv> lets us evaluate individual Perl strings, and then
96dbc785 314extract variables for coercion into C types. The following program,
cb1a09d0
AD
315I<string.c>, executes three Perl strings, extracting an C<int> from
316the first, a C<float> from the second, and a C<char *> from the third.
317
5e6bcc01
GID
318 #include <EXTERN.h>
319 #include <perl.h>
c47ff5f1 320
5e6bcc01 321 static PerlInterpreter *my_perl;
c47ff5f1 322
5e6bcc01
GID
323 main (int argc, char **argv, char **env)
324 {
325 char *embedding[] = { "", "-e", "0" };
c47ff5f1 326
5e6bcc01
GID
327 PERL_SYS_INIT3(&argc,&argv,&env);
328 my_perl = perl_alloc();
329 perl_construct( my_perl );
c47ff5f1 330
5e6bcc01
GID
331 perl_parse(my_perl, NULL, 3, embedding, NULL);
332 PL_exit_flags |= PERL_EXIT_DESTRUCT_END;
333 perl_run(my_perl);
c47ff5f1 334
5e6bcc01
GID
335 /** Treat $a as an integer **/
336 eval_pv("$a = 3; $a **= 2", TRUE);
337 printf("a = %d\n", SvIV(get_sv("a", 0)));
c47ff5f1 338
5e6bcc01
GID
339 /** Treat $a as a float **/
340 eval_pv("$a = 3.14; $a **= 2", TRUE);
341 printf("a = %f\n", SvNV(get_sv("a", 0)));
c47ff5f1 342
5e6bcc01
GID
343 /** Treat $a as a string **/
344 eval_pv(
345 "$a = 'rekcaH lreP rehtonA tsuJ'; $a = reverse($a);", TRUE);
346 printf("a = %s\n", SvPV_nolen(get_sv("a", 0)));
c47ff5f1 347
5e6bcc01
GID
348 perl_destruct(my_perl);
349 perl_free(my_perl);
350 PERL_SYS_TERM();
351 }
cb1a09d0 352
5e6bcc01
GID
353All of those strange functions with I<sv> in their names help convert Perl
354scalars to C types. They're described in L<perlguts> and L<perlapi>.
cb1a09d0
AD
355
356If you compile and run I<string.c>, you'll see the results of using
357I<SvIV()> to create an C<int>, I<SvNV()> to create a C<float>, and
358I<SvPV()> to create a string:
359
360 a = 9
361 a = 9.859600
362 a = Just Another Perl Hacker
363
8f183262 364In the example above, we've created a global variable to temporarily
353c6505 365store the computed value of our eval'ed expression. It is also
8f183262 366possible and in most cases a better strategy to fetch the return value
4929bf7b 367from I<eval_pv()> instead. Example:
8f183262 368
8f183262 369 ...
4929bf7b 370 SV *val = eval_pv("reverse 'rekcaH lreP rehtonA tsuJ'", TRUE);
1c5b513e 371 printf("%s\n", SvPV_nolen(val));
8f183262
DM
372 ...
373
374This way, we avoid namespace pollution by not creating global
375variables and we've simplified our code as well.
cb1a09d0
AD
376
377=head2 Performing Perl pattern matches and substitutions from your C program
378
4929bf7b 379The I<eval_sv()> function lets us evaluate strings of Perl code, so we can
cb1a09d0
AD
380define some functions that use it to "specialize" in matches and
381substitutions: I<match()>, I<substitute()>, and I<matches()>.
382
e010571f 383 I32 match(SV *string, char *pattern);
cb1a09d0 384
8a7dc658
JO
385Given a string and a pattern (e.g., C<m/clasp/> or C</\b\w*\b/>, which
386in your C program might appear as "/\\b\\w*\\b/"), match()
cb1a09d0
AD
387returns 1 if the string matches the pattern and 0 otherwise.
388
1f05cdcd 389 int substitute(SV **string, char *pattern);
cb1a09d0 390
1f05cdcd 391Given a pointer to an C<SV> and an C<=~> operation (e.g.,
8a7dc658 392C<s/bob/robert/g> or C<tr[A-Z][a-z]>), substitute() modifies the string
5e6bcc01
GID
393within the C<SV> as according to the operation, returning the number of
394substitutions made.
cb1a09d0 395
c70927a6 396 SSize_t matches(SV *string, char *pattern, AV **matches);
cb1a09d0 397
1f05cdcd 398Given an C<SV>, a pattern, and a pointer to an empty C<AV>,
90fdbbb7 399matches() evaluates C<$string =~ $pattern> in a list context, and
5e6bcc01
GID
400fills in I<matches> with the array elements, returning the number of matches
401found.
cb1a09d0 402
96dbc785 403Here's a sample program, I<match.c>, that uses all three (long lines have
404been wrapped here):
cb1a09d0 405
1f05cdcd
DM
406 #include <EXTERN.h>
407 #include <perl.h>
c47ff5f1 408
7fef744d
BD
409 static PerlInterpreter *my_perl;
410
4929bf7b 411 /** my_eval_sv(code, error_check)
5e6bcc01
GID
412 ** kinda like eval_sv(),
413 ** but we pop the return value off the stack
1f05cdcd 414 **/
4929bf7b 415 SV* my_eval_sv(SV *sv, I32 croak_on_error)
1f05cdcd
DM
416 {
417 dSP;
418 SV* retval;
1c5b513e 419
c47ff5f1 420
924508f0 421 PUSHMARK(SP);
4929bf7b 422 eval_sv(sv, G_SCALAR);
c47ff5f1 423
1f05cdcd
DM
424 SPAGAIN;
425 retval = POPs;
426 PUTBACK;
c47ff5f1 427
9cde0e7f 428 if (croak_on_error && SvTRUE(ERRSV))
1c5b513e 429 croak(SvPVx_nolen(ERRSV));
c47ff5f1 430
1f05cdcd
DM
431 return retval;
432 }
c47ff5f1 433
1f05cdcd
DM
434 /** match(string, pattern)
435 **
436 ** Used for matches in a scalar context.
437 **
438 ** Returns 1 if the match was successful; 0 otherwise.
439 **/
c47ff5f1 440
1f05cdcd
DM
441 I32 match(SV *string, char *pattern)
442 {
561b68a9 443 SV *command = newSV(0), *retval;
c47ff5f1 444
1f05cdcd 445 sv_setpvf(command, "my $string = '%s'; $string =~ %s",
1c5b513e 446 SvPV_nolen(string), pattern);
c47ff5f1 447
4929bf7b 448 retval = my_eval_sv(command, TRUE);
1f05cdcd 449 SvREFCNT_dec(command);
c47ff5f1 450
1f05cdcd
DM
451 return SvIV(retval);
452 }
c47ff5f1 453
1f05cdcd
DM
454 /** substitute(string, pattern)
455 **
5e6bcc01
GID
456 ** Used for =~ operations that
457 ** modify their left-hand side (s/// and tr///)
1f05cdcd
DM
458 **
459 ** Returns the number of successful matches, and
460 ** modifies the input string if there were any.
461 **/
c47ff5f1 462
1f05cdcd
DM
463 I32 substitute(SV **string, char *pattern)
464 {
561b68a9 465 SV *command = newSV(0), *retval;
c47ff5f1 466
1f05cdcd 467 sv_setpvf(command, "$string = '%s'; ($string =~ %s)",
1c5b513e 468 SvPV_nolen(*string), pattern);
c47ff5f1 469
4929bf7b 470 retval = my_eval_sv(command, TRUE);
1f05cdcd 471 SvREFCNT_dec(command);
c47ff5f1 472
64ace3f8 473 *string = get_sv("string", 0);
1f05cdcd
DM
474 return SvIV(retval);
475 }
c47ff5f1 476
1f05cdcd
DM
477 /** matches(string, pattern, matches)
478 **
90fdbbb7 479 ** Used for matches in a list context.
1f05cdcd
DM
480 **
481 ** Returns the number of matches,
482 ** and fills in **matches with the matching substrings
483 **/
c47ff5f1 484
c70927a6 485 SSize_t matches(SV *string, char *pattern, AV **match_list)
1f05cdcd 486 {
561b68a9 487 SV *command = newSV(0);
c70927a6 488 SSize_t num_matches;
c47ff5f1 489
1f05cdcd 490 sv_setpvf(command, "my $string = '%s'; @array = ($string =~ %s)",
1c5b513e 491 SvPV_nolen(string), pattern);
c47ff5f1 492
4929bf7b 493 my_eval_sv(command, TRUE);
1f05cdcd 494 SvREFCNT_dec(command);
c47ff5f1 495
cbfd0a87 496 *match_list = get_av("array", 0);
23aa77bc 497 num_matches = av_top_index(*match_list) + 1;
c47ff5f1 498
cb1a09d0 499 return num_matches;
1f05cdcd 500 }
c47ff5f1 501
1f05cdcd
DM
502 main (int argc, char **argv, char **env)
503 {
a6006777 504 char *embedding[] = { "", "-e", "0" };
1f05cdcd
DM
505 AV *match_list;
506 I32 num_matches, i;
7fef744d 507 SV *text;
c47ff5f1 508
1ccffcf5 509 PERL_SYS_INIT3(&argc,&argv,&env);
7fef744d 510 my_perl = perl_alloc();
1f05cdcd 511 perl_construct(my_perl);
96dbc785 512 perl_parse(my_perl, NULL, 3, embedding, NULL);
d95b23b2 513 PL_exit_flags |= PERL_EXIT_DESTRUCT_END;
c47ff5f1 514
561b68a9 515 text = newSV(0);
d3f3bf9f
RGS
516 sv_setpv(text, "When he is at a convenience store and the "
517 "bill comes to some amount like 76 cents, Maynard is "
518 "aware that there is something he *should* do, something "
519 "that will enable him to get back a quarter, but he has "
520 "no idea *what*. He fumbles through his red squeezey "
521 "changepurse and gives the boy three extra pennies with "
522 "his dollar, hoping that he might luck into the correct "
523 "amount. The boy gives him back two of his own pennies "
524 "and then the big shiny quarter that is his prize. "
525 "-RICHH");
c47ff5f1 526
96dbc785 527 if (match(text, "m/quarter/")) /** Does text contain 'quarter'? **/
1f05cdcd 528 printf("match: Text contains the word 'quarter'.\n\n");
96dbc785 529 else
1f05cdcd 530 printf("match: Text doesn't contain the word 'quarter'.\n\n");
c47ff5f1 531
96dbc785 532 if (match(text, "m/eighth/")) /** Does text contain 'eighth'? **/
1f05cdcd 533 printf("match: Text contains the word 'eighth'.\n\n");
96dbc785 534 else
1f05cdcd 535 printf("match: Text doesn't contain the word 'eighth'.\n\n");
c47ff5f1 536
96dbc785 537 /** Match all occurrences of /wi../ **/
538 num_matches = matches(text, "m/(wi..)/g", &match_list);
539 printf("matches: m/(wi..)/g found %d matches...\n", num_matches);
c47ff5f1 540
96dbc785 541 for (i = 0; i < num_matches; i++)
5e6bcc01
GID
542 printf("match: %s\n",
543 SvPV_nolen(*av_fetch(match_list, i, FALSE)));
cb1a09d0 544 printf("\n");
c47ff5f1 545
96dbc785 546 /** Remove all vowels from text **/
547 num_matches = substitute(&text, "s/[aeiou]//gi");
cb1a09d0 548 if (num_matches) {
c70927a6
FC
549 printf("substitute: s/[aeiou]//gi...%lu substitutions made.\n",
550 (unsigned long)num_matches);
1c5b513e 551 printf("Now text is: %s\n\n", SvPV_nolen(text));
cb1a09d0 552 }
c47ff5f1 553
96dbc785 554 /** Attempt a substitution **/
555 if (!substitute(&text, "s/Perl/C/")) {
1f05cdcd 556 printf("substitute: s/Perl/C...No substitution made.\n\n");
cb1a09d0 557 }
c47ff5f1 558
1f05cdcd 559 SvREFCNT_dec(text);
9cde0e7f 560 PL_perl_destruct_level = 1;
cb1a09d0
AD
561 perl_destruct(my_perl);
562 perl_free(my_perl);
1ccffcf5 563 PERL_SYS_TERM();
1f05cdcd 564 }
cb1a09d0 565
96dbc785 566which produces the output (again, long lines have been wrapped here)
cb1a09d0 567
5e6bcc01 568 match: Text contains the word 'quarter'.
96dbc785 569
5e6bcc01 570 match: Text doesn't contain the word 'eighth'.
96dbc785 571
5e6bcc01
GID
572 matches: m/(wi..)/g found 2 matches...
573 match: will
574 match: with
96dbc785 575
5e6bcc01
GID
576 substitute: s/[aeiou]//gi...139 substitutions made.
577 Now text is: Whn h s t cnvnnc str nd th bll cms t sm mnt lk 76 cnts,
578 Mynrd s wr tht thr s smthng h *shld* d, smthng tht wll nbl hm t gt
579 bck qrtr, bt h hs n d *wht*. H fmbls thrgh hs rd sqzy chngprs nd
580 gvs th by thr xtr pnns wth hs dllr, hpng tht h mght lck nt th crrct
581 mnt. Th by gvs hm bck tw f hs wn pnns nd thn th bg shny qrtr tht s
582 hs prz. -RCHH
96dbc785 583
5e6bcc01 584 substitute: s/Perl/C...No substitution made.
96dbc785 585
cb1a09d0
AD
586=head2 Fiddling with the Perl stack from your C program
587
588When trying to explain stacks, most computer science textbooks mumble
589something about spring-loaded columns of cafeteria plates: the last
590thing you pushed on the stack is the first thing you pop off. That'll
591do for our purposes: your C program will push some arguments onto "the Perl
592stack", shut its eyes while some magic happens, and then pop the
593results--the return value of your Perl subroutine--off the stack.
96dbc785 594
cb1a09d0
AD
595First you'll need to know how to convert between C types and Perl
596types, with newSViv() and sv_setnv() and newAV() and all their
4929bf7b 597friends. They're described in L<perlguts> and L<perlapi>.
cb1a09d0
AD
598
599Then you'll need to know how to manipulate the Perl stack. That's
600described in L<perlcall>.
601
96dbc785 602Once you've understood those, embedding Perl in C is easy.
cb1a09d0 603
54310121 604Because C has no builtin function for integer exponentiation, let's
cb1a09d0 605make Perl's ** operator available to it (this is less useful than it
5f05dabc 606sounds, because Perl implements ** with C's I<pow()> function). First
cb1a09d0
AD
607I'll create a stub exponentiation function in I<power.pl>:
608
609 sub expo {
610 my ($a, $b) = @_;
611 return $a ** $b;
612 }
613
614Now I'll create a C program, I<power.c>, with a function
615I<PerlPower()> that contains all the perlguts necessary to push the
616two arguments into I<expo()> and to pop the return value out. Take a
617deep breath...
618
5e6bcc01
GID
619 #include <EXTERN.h>
620 #include <perl.h>
96dbc785 621
5e6bcc01 622 static PerlInterpreter *my_perl;
96dbc785 623
5e6bcc01
GID
624 static void
625 PerlPower(int a, int b)
626 {
627 dSP; /* initialize stack pointer */
628 ENTER; /* everything created after here */
629 SAVETMPS; /* ...is a temporary variable. */
630 PUSHMARK(SP); /* remember the stack pointer */
631 XPUSHs(sv_2mortal(newSViv(a))); /* push the base onto the stack */
632 XPUSHs(sv_2mortal(newSViv(b))); /* push the exponent onto stack */
633 PUTBACK; /* make local stack pointer global */
634 call_pv("expo", G_SCALAR); /* call the function */
635 SPAGAIN; /* refresh stack pointer */
636 /* pop the return value from stack */
637 printf ("%d to the %dth power is %d.\n", a, b, POPi);
638 PUTBACK;
639 FREETMPS; /* free that return value */
640 LEAVE; /* ...and the XPUSHed "mortal" args.*/
641 }
96dbc785 642
5e6bcc01
GID
643 int main (int argc, char **argv, char **env)
644 {
645 char *my_argv[] = { "", "power.pl" };
96dbc785 646
5e6bcc01
GID
647 PERL_SYS_INIT3(&argc,&argv,&env);
648 my_perl = perl_alloc();
649 perl_construct( my_perl );
96dbc785 650
5e6bcc01
GID
651 perl_parse(my_perl, NULL, 2, my_argv, (char **)NULL);
652 PL_exit_flags |= PERL_EXIT_DESTRUCT_END;
653 perl_run(my_perl);
96dbc785 654
5e6bcc01 655 PerlPower(3, 4); /*** Compute 3 ** 4 ***/
96dbc785 656
5e6bcc01
GID
657 perl_destruct(my_perl);
658 perl_free(my_perl);
659 PERL_SYS_TERM();
660 }
96dbc785 661
cb1a09d0
AD
662
663
664Compile and run:
665
96dbc785 666 % cc -o power power.c `perl -MExtUtils::Embed -e ccopts -e ldopts`
667
668 % power
cb1a09d0
AD
669 3 to the 4th power is 81.
670
a6006777 671=head2 Maintaining a persistent interpreter
672
8a7dc658
JO
673When developing interactive and/or potentially long-running
674applications, it's a good idea to maintain a persistent interpreter
675rather than allocating and constructing a new interpreter multiple
676times. The major reason is speed: since Perl will only be loaded into
54310121 677memory once.
8a7dc658
JO
678
679However, you have to be more cautious with namespace and variable
680scoping when using a persistent interpreter. In previous examples
681we've been using global variables in the default package C<main>. We
682knew exactly what code would be run, and assumed we could avoid
683variable collisions and outrageous symbol table growth.
684
685Let's say your application is a server that will occasionally run Perl
686code from some arbitrary file. Your server has no way of knowing what
687code it's going to run. Very dangerous.
688
689If the file is pulled in by C<perl_parse()>, compiled into a newly
690constructed interpreter, and subsequently cleaned out with
691C<perl_destruct()> afterwards, you're shielded from most namespace
692troubles.
693
694One way to avoid namespace collisions in this scenario is to translate
695the filename into a guaranteed-unique package name, and then compile
e010571f 696the code into that package using L<perlfunc/eval>. In the example
8a7dc658
JO
697below, each file will only be compiled once. Or, the application
698might choose to clean out the symbol table associated with the file
4929bf7b 699after it's no longer needed. Using L<perlapi/call_argv>, We'll
8a7dc658
JO
700call the subroutine C<Embed::Persistent::eval_file> which lives in the
701file C<persistent.pl> and pass the filename and boolean cleanup/cache
a6006777 702flag as arguments.
703
8a7dc658
JO
704Note that the process will continue to grow for each file that it
705uses. In addition, there might be C<AUTOLOAD>ed subroutines and other
706conditions that cause Perl's symbol table to grow. You might want to
707add some logic that keeps track of the process size, or restarts
708itself after a certain number of requests, to ensure that memory
709consumption is minimized. You'll also want to scope your variables
e010571f 710with L<perlfunc/my> whenever possible.
a6006777 711
54310121 712
a6006777 713 package Embed::Persistent;
714 #persistent.pl
54310121 715
a6006777 716 use strict;
77ca0c92 717 our %Cache;
1ee082b7 718 use Symbol qw(delete_package);
54310121 719
a6006777 720 sub valid_package_name {
721 my($string) = @_;
722 $string =~ s/([^A-Za-z0-9\/])/sprintf("_%2x",unpack("C",$1))/eg;
723 # second pass only for words starting with a digit
724 $string =~ s|/(\d)|sprintf("/_%2x",unpack("C",$1))|eg;
54310121 725
a6006777 726 # Dress it up as a real package name
727 $string =~ s|/|::|g;
728 return "Embed" . $string;
729 }
54310121 730
a6006777 731 sub eval_file {
732 my($filename, $delete) = @_;
733 my $package = valid_package_name($filename);
734 my $mtime = -M $filename;
735 if(defined $Cache{$package}{mtime}
736 &&
54310121 737 $Cache{$package}{mtime} <= $mtime)
a6006777 738 {
54310121 739 # we have compiled this subroutine already,
8ebc5c01 740 # it has not been updated on disk, nothing left to do
741 print STDERR "already compiled $package->handler\n";
a6006777 742 }
743 else {
8ebc5c01 744 local *FH;
745 open FH, $filename or die "open '$filename' $!";
746 local($/) = undef;
747 my $sub = <FH>;
748 close FH;
54310121 749
8ebc5c01 750 #wrap the code into a subroutine inside our unique package
751 my $eval = qq{package $package; sub handler { $sub; }};
752 {
753 # hide our variables within this block
754 my($filename,$mtime,$package,$sub);
755 eval $eval;
756 }
757 die $@ if $@;
54310121 758
8ebc5c01 759 #cache it unless we're cleaning out each time
760 $Cache{$package}{mtime} = $mtime unless $delete;
a6006777 761 }
54310121 762
a6006777 763 eval {$package->handler;};
764 die $@ if $@;
54310121 765
a6006777 766 delete_package($package) if $delete;
54310121 767
a6006777 768 #take a look if you want
769 #print Devel::Symdump->rnew($package)->as_string, $/;
770 }
54310121 771
a6006777 772 1;
54310121 773
a6006777 774 __END__
775
776 /* persistent.c */
54310121 777 #include <EXTERN.h>
778 #include <perl.h>
779
5e6bcc01
GID
780 /* 1 = clean out filename's symbol table after each request,
781 0 = don't
782 */
a6006777 783 #ifndef DO_CLEAN
784 #define DO_CLEAN 0
785 #endif
54310121 786
2307c6d0
SB
787 #define BUFFER_SIZE 1024
788
7fef744d 789 static PerlInterpreter *my_perl = NULL;
54310121 790
a6006777 791 int
792 main(int argc, char **argv, char **env)
793 {
794 char *embedding[] = { "", "persistent.pl" };
795 char *args[] = { "", DO_CLEAN, NULL };
2307c6d0 796 char filename[BUFFER_SIZE];
a6006777 797 int exitstatus = 0;
54310121 798
1ccffcf5 799 PERL_SYS_INIT3(&argc,&argv,&env);
7fef744d 800 if((my_perl = perl_alloc()) == NULL) {
8ebc5c01 801 fprintf(stderr, "no memory!");
802 exit(1);
a6006777 803 }
7fef744d 804 perl_construct(my_perl);
54310121 805
5e6bcc01
GID
806 PL_origalen = 1; /* don't let $0 assignment update the
807 proctitle or embedding[0] */
7fef744d 808 exitstatus = perl_parse(my_perl, NULL, 2, embedding, NULL);
d95b23b2 809 PL_exit_flags |= PERL_EXIT_DESTRUCT_END;
54310121 810 if(!exitstatus) {
7fef744d 811 exitstatus = perl_run(my_perl);
54310121 812
2307c6d0
SB
813 while(printf("Enter file name: ") &&
814 fgets(filename, BUFFER_SIZE, stdin)) {
54310121 815
2307c6d0 816 filename[strlen(filename)-1] = '\0'; /* strip \n */
5e6bcc01
GID
817 /* call the subroutine,
818 passing it the filename as an argument */
8ebc5c01 819 args[0] = filename;
4929bf7b 820 call_argv("Embed::Persistent::eval_file",
8ebc5c01 821 G_DISCARD | G_EVAL, args);
54310121 822
8ebc5c01 823 /* check $@ */
9cde0e7f 824 if(SvTRUE(ERRSV))
1c5b513e 825 fprintf(stderr, "eval error: %s\n", SvPV_nolen(ERRSV));
8ebc5c01 826 }
a6006777 827 }
54310121 828
9cde0e7f 829 PL_perl_destruct_level = 0;
7fef744d
BD
830 perl_destruct(my_perl);
831 perl_free(my_perl);
1ccffcf5 832 PERL_SYS_TERM();
a6006777 833 exit(exitstatus);
834 }
835
a6006777 836Now compile:
837
5e6bcc01
GID
838 % cc -o persistent persistent.c \
839 `perl -MExtUtils::Embed -e ccopts -e ldopts`
a6006777 840
d1be9408 841Here's an example script file:
a6006777 842
843 #test.pl
844 my $string = "hello";
845 foo($string);
846
847 sub foo {
848 print "foo says: @_\n";
849 }
850
851Now run:
852
853 % persistent
854 Enter file name: test.pl
855 foo says: hello
856 Enter file name: test.pl
857 already compiled Embed::test_2epl->handler
858 foo says: hello
859 Enter file name: ^C
860
d95b23b2
AB
861=head2 Execution of END blocks
862
863Traditionally END blocks have been executed at the end of the perl_run.
864This causes problems for applications that never call perl_run. Since
865perl 5.7.2 you can specify C<PL_exit_flags |= PERL_EXIT_DESTRUCT_END>
866to get the new behaviour. This also enables the running of END blocks if
bf9cdc68 867the perl_parse fails and C<perl_destruct> will return the exit value.
d95b23b2 868
a2722ac9
GA
869=head2 $0 assignments
870
871When a perl script assigns a value to $0 then the perl runtime will
872try to make this value show up as the program name reported by "ps" by
873updating the memory pointed to by the argv passed to perl_parse() and
874also calling API functions like setproctitle() where available. This
875behaviour might not be appropriate when embedding perl and can be
876disabled by assigning the value C<1> to the variable C<PL_origalen>
877before perl_parse() is called.
878
879The F<persistent.c> example above is for instance likely to segfault
880when $0 is assigned to if the C<PL_origalen = 1;> assignment is
881removed. This because perl will try to write to the read only memory
882of the C<embedding[]> strings.
883
8ebc5c01 884=head2 Maintaining multiple interpreter instances
885
8a7dc658
JO
886Some rare applications will need to create more than one interpreter
887during a session. Such an application might sporadically decide to
54310121 888release any resources associated with the interpreter.
8a7dc658
JO
889
890The program must take care to ensure that this takes place I<before>
9bbedd82
JH
891the next interpreter is constructed. By default, when perl is not
892built with any special options, the global variable
9cde0e7f 893C<PL_perl_destruct_level> is set to C<0>, since extra cleaning isn't
9bbedd82
JH
894usually needed when a program only ever creates a single interpreter
895in its entire lifetime.
8a7dc658 896
9cde0e7f 897Setting C<PL_perl_destruct_level> to C<1> makes everything squeaky clean:
8a7dc658 898
8ebc5c01 899 while(1) {
900 ...
9cde0e7f 901 /* reset global variables here with PL_perl_destruct_level = 1 */
bf9cdc68 902 PL_perl_destruct_level = 1;
54310121 903 perl_construct(my_perl);
8ebc5c01 904 ...
905 /* clean and reset _everything_ during perl_destruct */
bf9cdc68 906 PL_perl_destruct_level = 1;
54310121 907 perl_destruct(my_perl);
908 perl_free(my_perl);
8ebc5c01 909 ...
910 /* let's go do it again! */
911 }
912
54310121 913When I<perl_destruct()> is called, the interpreter's syntax parse tree
bf9cdc68
RG
914and symbol tables are cleaned up, and global variables are reset. The
915second assignment to C<PL_perl_destruct_level> is needed because
916perl_construct resets it to C<0>.
8ebc5c01 917
8a7dc658 918Now suppose we have more than one interpreter instance running at the
9bbedd82
JH
919same time. This is feasible, but only if you used the Configure option
920C<-Dusemultiplicity> or the options C<-Dusethreads -Duseithreads> when
bf9cdc68 921building perl. By default, enabling one of these Configure options
9bbedd82 922sets the per-interpreter global variable C<PL_perl_destruct_level> to
bf9cdc68
RG
923C<1>, so that thorough cleaning is automatic and interpreter variables
924are initialized correctly. Even if you don't intend to run two or
925more interpreters at the same time, but to run them sequentially, like
926in the above example, it is recommended to build perl with the
927C<-Dusemultiplicity> option otherwise some interpreter variables may
928not be initialized correctly between consecutive runs and your
929application may crash.
9bbedd82 930
832a833b
JH
931See also L<perlxs/Thread-aware system interfaces>.
932
9bbedd82
JH
933Using C<-Dusethreads -Duseithreads> rather than C<-Dusemultiplicity>
934is more appropriate if you intend to run multiple interpreters
935concurrently in different threads, because it enables support for
936linking in the thread libraries of your system with the interpreter.
8ebc5c01 937
938Let's give it a try:
939
940
941 #include <EXTERN.h>
8a7dc658 942 #include <perl.h>
8ebc5c01 943
944 /* we're going to embed two interpreters */
8ebc5c01 945
8ebc5c01 946 #define SAY_HELLO "-e", "print qq(Hi, I'm $^X\n)"
947
8ebc5c01 948 int main(int argc, char **argv, char **env)
949 {
1ccffcf5 950 PerlInterpreter *one_perl, *two_perl;
8ebc5c01 951 char *one_args[] = { "one_perl", SAY_HELLO };
952 char *two_args[] = { "two_perl", SAY_HELLO };
953
1ccffcf5
IZ
954 PERL_SYS_INIT3(&argc,&argv,&env);
955 one_perl = perl_alloc();
956 two_perl = perl_alloc();
957
9bbedd82 958 PERL_SET_CONTEXT(one_perl);
8ebc5c01 959 perl_construct(one_perl);
9bbedd82 960 PERL_SET_CONTEXT(two_perl);
8ebc5c01 961 perl_construct(two_perl);
962
9bbedd82 963 PERL_SET_CONTEXT(one_perl);
8ebc5c01 964 perl_parse(one_perl, NULL, 3, one_args, (char **)NULL);
9bbedd82 965 PERL_SET_CONTEXT(two_perl);
8ebc5c01 966 perl_parse(two_perl, NULL, 3, two_args, (char **)NULL);
967
9bbedd82 968 PERL_SET_CONTEXT(one_perl);
8ebc5c01 969 perl_run(one_perl);
9bbedd82 970 PERL_SET_CONTEXT(two_perl);
8ebc5c01 971 perl_run(two_perl);
972
9bbedd82 973 PERL_SET_CONTEXT(one_perl);
8ebc5c01 974 perl_destruct(one_perl);
9bbedd82 975 PERL_SET_CONTEXT(two_perl);
8ebc5c01 976 perl_destruct(two_perl);
977
9bbedd82 978 PERL_SET_CONTEXT(one_perl);
8ebc5c01 979 perl_free(one_perl);
9bbedd82 980 PERL_SET_CONTEXT(two_perl);
8ebc5c01 981 perl_free(two_perl);
1ccffcf5 982 PERL_SYS_TERM();
8ebc5c01 983 }
984
9bbedd82
JH
985Note the calls to PERL_SET_CONTEXT(). These are necessary to initialize
986the global state that tracks which interpreter is the "current" one on
987the particular process or thread that may be running it. It should
988always be used if you have more than one interpreter and are making
989perl API calls on both interpreters in an interleaved fashion.
990
991PERL_SET_CONTEXT(interp) should also be called whenever C<interp> is
992used by a thread that did not create it (using either perl_alloc(), or
993the more esoteric perl_clone()).
8ebc5c01 994
995Compile as usual:
996
5e6bcc01
GID
997 % cc -o multiplicity multiplicity.c \
998 `perl -MExtUtils::Embed -e ccopts -e ldopts`
8ebc5c01 999
1000Run it, Run it:
1001
1002 % multiplicity
1003 Hi, I'm one_perl
1004 Hi, I'm two_perl
1005
5e6bcc01
GID
1006=head2 Using Perl modules, which themselves use C libraries, from your C
1007program
96dbc785 1008
1009If you've played with the examples above and tried to embed a script
5e6bcc01
GID
1010that I<use()>s a Perl module (such as I<Socket>) which itself uses a C or C++
1011library, this probably happened:
96dbc785 1012
1013
1014 Can't load module Socket, dynamic loading not available in this perl.
1015 (You may need to build a new perl executable which either supports
1016 dynamic loading or has the Socket module statically linked into it.)
1017
1018
1019What's wrong?
1020
1021Your interpreter doesn't know how to communicate with these extensions
1022on its own. A little glue will help. Up until now you've been
1023calling I<perl_parse()>, handing it NULL for the second argument:
1024
1025 perl_parse(my_perl, NULL, argc, my_argv, NULL);
1026
5e6bcc01
GID
1027That's where the glue code can be inserted to create the initial contact
1028between Perl and linked C/C++ routines. Let's take a look some pieces of
1029I<perlmain.c> to see how Perl does this:
96dbc785 1030
cc7dda15 1031 static void xs_init (pTHX);
96dbc785 1032
cc7dda15
GS
1033 EXTERN_C void boot_DynaLoader (pTHX_ CV* cv);
1034 EXTERN_C void boot_Socket (pTHX_ CV* cv);
96dbc785 1035
1036
1037 EXTERN_C void
cc7dda15 1038 xs_init(pTHX)
96dbc785 1039 {
1040 char *file = __FILE__;
1041 /* DynaLoader is a special case */
1042 newXS("DynaLoader::boot_DynaLoader", boot_DynaLoader, file);
1043 newXS("Socket::bootstrap", boot_Socket, file);
1044 }
1045
1046Simply put: for each extension linked with your Perl executable
1047(determined during its initial configuration on your
1048computer or when adding a new extension),
1049a Perl subroutine is created to incorporate the extension's
1050routines. Normally, that subroutine is named
1051I<Module::bootstrap()> and is invoked when you say I<use Module>. In
1052turn, this hooks into an XSUB, I<boot_Module>, which creates a Perl
1053counterpart for each of the extension's XSUBs. Don't worry about this
1054part; leave that to the I<xsubpp> and extension authors. If your
1055extension is dynamically loaded, DynaLoader creates I<Module::bootstrap()>
1056for you on the fly. In fact, if you have a working DynaLoader then there
5f05dabc 1057is rarely any need to link in any other extensions statically.
96dbc785 1058
1059
1060Once you have this code, slap it into the second argument of I<perl_parse()>:
1061
1062
1063 perl_parse(my_perl, xs_init, argc, my_argv, NULL);
1064
1065
1066Then compile:
1067
8a7dc658 1068 % cc -o interp interp.c `perl -MExtUtils::Embed -e ccopts -e ldopts`
96dbc785 1069
1070 % interp
1071 use Socket;
1072 use SomeDynamicallyLoadedModule;
1073
1074 print "Now I can use extensions!\n"'
1075
1076B<ExtUtils::Embed> can also automate writing the I<xs_init> glue code.
1077
8a7dc658 1078 % perl -MExtUtils::Embed -e xsinit -- -o perlxsi.c
96dbc785 1079 % cc -c perlxsi.c `perl -MExtUtils::Embed -e ccopts`
1080 % cc -c interp.c `perl -MExtUtils::Embed -e ccopts`
8a7dc658 1081 % cc -o interp perlxsi.o interp.o `perl -MExtUtils::Embed -e ldopts`
96dbc785 1082
4929bf7b 1083Consult L<perlxs>, L<perlguts>, and L<perlapi> for more details.
96dbc785 1084
ccd65d51
KW
1085=head2 Using embedded Perl with POSIX locales
1086
1087(See L<perllocale> for information about these.)
1088When a Perl interpreter normally starts up, it tells the system it wants
1089to use the system's default locale. This is often, but not necessarily,
1090the "C" or "POSIX" locale. Absent a S<C<"use locale">> within the perl
1091code, this mostly has no effect (but see L<perllocale/Not within the
d6ded950 1092scope of "use locale">). Also, there is not a problem if the
ccd65d51
KW
1093locale you want to use in your embedded Perl is the same as the system
1094default. However, this doesn't work if you have set up and want to use
1095a locale that isn't the system default one. Starting in Perl v5.20, you
1096can tell the embedded Perl interpreter that the locale is already
1097properly set up, and to skip doing its own normal initialization. It
1098skips if the environment variable C<PERL_SKIP_LOCALE_INIT> is set (even
1099if set to 0 or C<"">). A Perl that has this capability will define the
1100C pre-processor symbol C<HAS_SKIP_LOCALE_INIT>. This allows code that
1101has to work with multiple Perl versions to do some sort of work-around
1102when confronted with an earlier Perl.
1103
35209cc8
JH
1104=head1 Hiding Perl_
1105
e1020413 1106If you completely hide the short forms of the Perl public API,
d51482e4 1107add -DPERL_NO_SHORT_NAMES to the compilation flags. This means that
35209cc8
JH
1108for example instead of writing
1109
1110 warn("%d bottles of beer on the wall", bottlecount);
1111
1112you will have to write the explicit full form
1113
1114 Perl_warn(aTHX_ "%d bottles of beer on the wall", bottlecount);
1115
96090e4f
LB
1116(See L<perlguts/"Background and PERL_IMPLICIT_CONTEXT"> for the explanation
1117of the C<aTHX_>. ) Hiding the short forms is very useful for avoiding
35209cc8
JH
1118all sorts of nasty (C preprocessor or otherwise) conflicts with other
1119software packages (Perl defines about 2400 APIs with these short names,
1120take or leave few hundred, so there certainly is room for conflict.)
1121
cb1a09d0
AD
1122=head1 MORAL
1123
1124You can sometimes I<write faster code> in C, but
5f05dabc 1125you can always I<write code faster> in Perl. Because you can use
cb1a09d0
AD
1126each from the other, combine them as you wish.
1127
1128
1129=head1 AUTHOR
1130
8eabb633
JH
1131Jon Orwant <F<orwant@media.mit.edu>> and Doug MacEachern
1132<F<dougm@covalent.net>>, with small contributions from Tim Bunce, Tom
e010571f
GS
1133Christiansen, Guy Decoux, Hallvard Furuseth, Dov Grobgeld, and Ilya
1134Zakharevich.
cb1a09d0 1135
e010571f 1136Doug MacEachern has an article on embedding in Volume 1, Issue 4 of
f224927c 1137The Perl Journal ( http://www.tpj.com/ ). Doug is also the developer of the
e010571f
GS
1138most widely-used Perl embedding: the mod_perl system
1139(perl.apache.org), which embeds Perl in the Apache web server.
1140Oracle, Binary Evolution, ActiveState, and Ben Sugars's nsapi_perl
1141have used this model for Oracle, Netscape and Internet Information
1142Server Perl plugins.
cb1a09d0 1143
8a7dc658
JO
1144=head1 COPYRIGHT
1145
e010571f 1146Copyright (C) 1995, 1996, 1997, 1998 Doug MacEachern and Jon Orwant. All
8a7dc658
JO
1147Rights Reserved.
1148
608704e1 1149This document may be distributed under the same terms as Perl itself.