Re: [PATCH] let perlmodstyle mention Module::Build and Test::More
[p5sagit/p5-mst-13.2.git] / pod / perlembed.pod
index e863457..484884e 100644 (file)
@@ -161,8 +161,8 @@ you:
 
 If the B<ExtUtils::Embed> module isn't part of your Perl distribution,
 you can retrieve it from
-http://www.perl.com/perl/CPAN/modules/by-module/ExtUtils/.  (If
-this documentation came from your Perl distribution, then you're
+http://www.perl.com/perl/CPAN/modules/by-module/ExtUtils/
+(If this documentation came from your Perl distribution, then you're
 running 5.004 or better and you already have it.)
 
 The B<ExtUtils::Embed> kit on CPAN also contains all source code for
@@ -386,6 +386,8 @@ been wrapped here):
  #include <EXTERN.h>
  #include <perl.h>
 
+ static PerlInterpreter *my_perl;
+
  /** my_eval_sv(code, error_check)
  ** kinda like eval_sv(), 
  ** but we pop the return value off the stack 
@@ -481,17 +483,18 @@ been wrapped here):
 
  main (int argc, char **argv, char **env)
  {
-     PerlInterpreter *my_perl = perl_alloc();
      char *embedding[] = { "", "-e", "0" };
      AV *match_list;
      I32 num_matches, i;
-     SV *text = NEWSV(1099,0);
+     SV *text;
      STRLEN n_a;
 
+     my_perl = perl_alloc();
      perl_construct(my_perl);
      perl_parse(my_perl, NULL, 3, embedding, NULL);
      PL_exit_flags |= PERL_EXIT_DESTRUCT_END;
 
+     text = NEWSV(1099,0);
      sv_setpv(text, "When he is at a convenience store and the bill comes to some amount like 76 cents, Maynard is aware that there is something he *should* do, something that will enable him to get back a quarter, but he has no idea *what*.  He fumbles through his red squeezey changepurse and gives the boy three extra pennies with his dollar, hoping that he might luck into the correct amount.  The boy gives him back two of his own pennies and then the big shiny quarter that is his prize. -RICHH");
 
      if (match(text, "m/quarter/")) /** Does text contain 'quarter'? **/
@@ -747,7 +750,7 @@ with L<perlfunc/my> whenever possible.
  #define DO_CLEAN 0
  #endif
 
- static PerlInterpreter *perl = NULL;
+ static PerlInterpreter *my_perl = NULL;
 
  int
  main(int argc, char **argv, char **env)
@@ -758,16 +761,16 @@ with L<perlfunc/my> whenever possible.
      int exitstatus = 0;
      STRLEN n_a;
 
-     if((perl = perl_alloc()) == NULL) {
+     if((my_perl = perl_alloc()) == NULL) {
         fprintf(stderr, "no memory!");
         exit(1);
      }
-     perl_construct(perl);
+     perl_construct(my_perl);
 
-     exitstatus = perl_parse(perl, NULL, 2, embedding, NULL);
+     exitstatus = perl_parse(my_perl, NULL, 2, embedding, NULL);
      PL_exit_flags |= PERL_EXIT_DESTRUCT_END;
      if(!exitstatus) {
-        exitstatus = perl_run(perl);
+        exitstatus = perl_run(my_perl);
 
         while(printf("Enter file name: ") && gets(filename)) {
 
@@ -783,8 +786,8 @@ with L<perlfunc/my> whenever possible.
      }
 
      PL_perl_destruct_level = 0;
-     perl_destruct(perl);
-     perl_free(perl);
+     perl_destruct(my_perl);
+     perl_free(my_perl);
      exit(exitstatus);
  }
 
@@ -1035,6 +1038,24 @@ also need this path so it knows where to find Perl include files.
 This path can be added via the Tools -> Options -> Directories menu.
 Finally, select Build -> Build interp.exe and you're ready to go.
 
+=head1 Hiding Perl_
+
+If you completely hide the short forms forms of the Perl public API,
+add -DPERL_NO_SHORT_NAMES to the compilation flags.  This means that
+for example instead of writing
+
+    warn("%d bottles of beer on the wall", bottlecount);
+
+you will have to write the explicit full form
+
+    Perl_warn(aTHX_ "%d bottles of beer on the wall", bottlecount);
+
+(See L<perlguts/Background and PERL_IMPLICIT_CONTEXT for the explanation
+of the C<aTHX_>.> )  Hiding the short forms is very useful for avoiding
+all sorts of nasty (C preprocessor or otherwise) conflicts with other
+software packages (Perl defines about 2400 APIs with these short names,
+take or leave few hundred, so there certainly is room for conflict.)
+
 =head1 MORAL
 
 You can sometimes I<write faster code> in C, but
@@ -1050,7 +1071,7 @@ Christiansen, Guy Decoux, Hallvard Furuseth, Dov Grobgeld, and Ilya
 Zakharevich.
 
 Doug MacEachern has an article on embedding in Volume 1, Issue 4 of
-The Perl Journal (http://tpj.com).  Doug is also the developer of the
+The Perl Journal ( http://www.tpj.com/ ).  Doug is also the developer of the
 most widely-used Perl embedding: the mod_perl system
 (perl.apache.org), which embeds Perl in the Apache web server.
 Oracle, Binary Evolution, ActiveState, and Ben Sugars's nsapi_perl