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