xref: /openbsd/gnu/usr.bin/perl/pod/perlcall.pod (revision 4bdff4be)
1=head1 NAME
2
3perlcall - Perl calling conventions from C
4
5=head1 DESCRIPTION
6
7The purpose of this document is to show you how to call Perl subroutines
8directly from C, i.e., how to write I<callbacks>.
9
10Apart from discussing the C interface provided by Perl for writing
11callbacks the document uses a series of examples to show how the
12interface actually works in practice.  In addition some techniques for
13coding callbacks are covered.
14
15Examples where callbacks are necessary include
16
17=over 5
18
19=item * An Error Handler
20
21You have created an XSUB interface to an application's C API.
22
23A fairly common feature in applications is to allow you to define a C
24function that will be called whenever something nasty occurs. What we
25would like is to be able to specify a Perl subroutine that will be
26called instead.
27
28=item * An Event-Driven Program
29
30The classic example of where callbacks are used is when writing an
31event driven program, such as for an X11 application.  In this case
32you register functions to be called whenever specific events occur,
33e.g., a mouse button is pressed, the cursor moves into a window or a
34menu item is selected.
35
36=back
37
38Although the techniques described here are applicable when embedding
39Perl in a C program, this is not the primary goal of this document.
40There are other details that must be considered and are specific to
41embedding Perl. For details on embedding Perl in C refer to
42L<perlembed>.
43
44Before you launch yourself head first into the rest of this document,
45it would be a good idea to have read the following two documents--L<perlxs>
46and L<perlguts>.
47
48=head1 THE CALL_ FUNCTIONS
49
50Although this stuff is easier to explain using examples, you first need
51be aware of a few important definitions.
52
53Perl has a number of C functions that allow you to call Perl
54subroutines.  They are
55
56    I32 call_sv(SV* sv, I32 flags);
57    I32 call_pv(char *subname, I32 flags);
58    I32 call_method(char *methname, I32 flags);
59    I32 call_argv(char *subname, I32 flags, char **argv);
60
61The key function is I<call_sv>.  All the other functions are
62fairly simple wrappers which make it easier to call Perl subroutines in
63special cases. At the end of the day they will all call I<call_sv>
64to invoke the Perl subroutine.
65
66All the I<call_*> functions have a C<flags> parameter which is
67used to pass a bit mask of options to Perl.  This bit mask operates
68identically for each of the functions.  The settings available in the
69bit mask are discussed in L</FLAG VALUES>.
70
71Each of the functions will now be discussed in turn.
72
73=over 5
74
75=item call_sv
76
77I<call_sv> takes two parameters. The first, C<sv>, is an SV*.
78This allows you to specify the Perl subroutine to be called either as a
79C string (which has first been converted to an SV) or a reference to a
80subroutine. The section, L</Using call_sv>, shows how you can make
81use of I<call_sv>.
82
83=item call_pv
84
85The function, I<call_pv>, is similar to I<call_sv> except it
86expects its first parameter to be a C char* which identifies the Perl
87subroutine you want to call, e.g., C<call_pv("fred", 0)>.  If the
88subroutine you want to call is in another package, just include the
89package name in the string, e.g., C<"pkg::fred">.
90
91=item call_method
92
93The function I<call_method> is used to call a method from a Perl
94class.  The parameter C<methname> corresponds to the name of the method
95to be called.  Note that the class that the method belongs to is passed
96on the Perl stack rather than in the parameter list. This class can be
97either the name of the class (for a static method) or a reference to an
98object (for a virtual method).  See L<perlobj> for more information on
99static and virtual methods and L</Using call_method> for an example
100of using I<call_method>.
101
102=item call_argv
103
104I<call_argv> calls the Perl subroutine specified by the C string
105stored in the C<subname> parameter. It also takes the usual C<flags>
106parameter.  The final parameter, C<argv>, consists of a NULL-terminated
107list of C strings to be passed as parameters to the Perl subroutine.
108See L</Using call_argv>.
109
110=back
111
112All the functions return an integer. This is a count of the number of
113items returned by the Perl subroutine. The actual items returned by the
114subroutine are stored on the Perl stack.
115
116As a general rule you should I<always> check the return value from
117these functions.  Even if you are expecting only a particular number of
118values to be returned from the Perl subroutine, there is nothing to
119stop someone from doing something unexpected--don't say you haven't
120been warned.
121
122=head1 FLAG VALUES
123
124The C<flags> parameter in all the I<call_*> functions is one of C<G_VOID>,
125C<G_SCALAR>, or C<G_LIST>, which indicate the call context, OR'ed together
126with a bit mask of any combination of the other G_* symbols defined below.
127
128=head2  G_VOID
129
130=for apidoc AmnUh||G_VOID
131
132Calls the Perl subroutine in a void context.
133
134This flag has 2 effects:
135
136=over 5
137
138=item 1.
139
140It indicates to the subroutine being called that it is executing in
141a void context (if it executes I<wantarray> the result will be the
142undefined value).
143
144=item 2.
145
146It ensures that nothing is actually returned from the subroutine.
147
148=back
149
150The value returned by the I<call_*> function indicates how many
151items have been returned by the Perl subroutine--in this case it will
152be 0.
153
154
155=head2  G_SCALAR
156
157=for apidoc AmnUh||G_SCALAR
158
159Calls the Perl subroutine in a scalar context.  This is the default
160context flag setting for all the I<call_*> functions.
161
162This flag has 2 effects:
163
164=over 5
165
166=item 1.
167
168It indicates to the subroutine being called that it is executing in a
169scalar context (if it executes I<wantarray> the result will be false).
170
171=item 2.
172
173It ensures that only a scalar is actually returned from the subroutine.
174The subroutine can, of course,  ignore the I<wantarray> and return a
175list anyway. If so, then only the last element of the list will be
176returned.
177
178=back
179
180The value returned by the I<call_*> function indicates how many
181items have been returned by the Perl subroutine - in this case it will
182be either 0 or 1.
183
184If 0, then you have specified the G_DISCARD flag.
185
186If 1, then the item actually returned by the Perl subroutine will be
187stored on the Perl stack - the section L</Returning a Scalar> shows how
188to access this value on the stack.  Remember that regardless of how
189many items the Perl subroutine returns, only the last one will be
190accessible from the stack - think of the case where only one value is
191returned as being a list with only one element.  Any other items that
192were returned will not exist by the time control returns from the
193I<call_*> function.  The section L</Returning a List in Scalar
194Context> shows an example of this behavior.
195
196
197=head2 G_LIST
198
199=for apidoc AmnUh||G_LIST
200
201Calls the Perl subroutine in a list context. Prior to Perl version
2025.35.1 this was called C<G_ARRAY>.
203
204As with G_SCALAR, this flag has 2 effects:
205
206=over 5
207
208=item 1.
209
210It indicates to the subroutine being called that it is executing in a
211list context (if it executes I<wantarray> the result will be true).
212
213=item 2.
214
215It ensures that all items returned from the subroutine will be
216accessible when control returns from the I<call_*> function.
217
218=back
219
220The value returned by the I<call_*> function indicates how many
221items have been returned by the Perl subroutine.
222
223If 0, then you have specified the G_DISCARD flag.
224
225If not 0, then it will be a count of the number of items returned by
226the subroutine. These items will be stored on the Perl stack.  The
227section L</Returning a List of Values> gives an example of using the
228G_LIST flag and the mechanics of accessing the returned items from the
229Perl stack.
230
231=head2 G_DISCARD
232
233=for apidoc AmnUh||G_DISCARD
234
235By default, the I<call_*> functions place the items returned from
236by the Perl subroutine on the stack.  If you are not interested in
237these items, then setting this flag will make Perl get rid of them
238automatically for you.  Note that it is still possible to indicate a
239context to the Perl subroutine by using either G_SCALAR or G_LIST.
240
241If you do not set this flag then it is I<very> important that you make
242sure that any temporaries (i.e., parameters passed to the Perl
243subroutine and values returned from the subroutine) are disposed of
244yourself.  The section L</Returning a Scalar> gives details of how to
245dispose of these temporaries explicitly and the section L</Using Perl to
246Dispose of Temporaries> discusses the specific circumstances where you
247can ignore the problem and let Perl deal with it for you.
248
249=head2 G_NOARGS
250
251=for apidoc AmnUh||G_NOARGS
252
253Whenever a Perl subroutine is called using one of the I<call_*>
254functions, it is assumed by default that parameters are to be passed to
255the subroutine.  If you are not passing any parameters to the Perl
256subroutine, you can save a bit of time by setting this flag.  It has
257the effect of not creating the C<@_> array for the Perl subroutine.
258
259Although the functionality provided by this flag may seem
260straightforward, it should be used only if there is a good reason to do
261so.  The reason for being cautious is that, even if you have specified
262the G_NOARGS flag, it is still possible for the Perl subroutine that
263has been called to think that you have passed it parameters.
264
265In fact, what can happen is that the Perl subroutine you have called
266can access the C<@_> array from a previous Perl subroutine.  This will
267occur when the code that is executing the I<call_*> function has
268itself been called from another Perl subroutine. The code below
269illustrates this
270
271    sub fred
272      { print "@_\n"  }
273
274    sub joe
275      { &fred }
276
277    &joe(1,2,3);
278
279This will print
280
281    1 2 3
282
283What has happened is that C<fred> accesses the C<@_> array which
284belongs to C<joe>.
285
286
287=head2 G_EVAL
288
289=for apidoc AmnUh||G_EVAL
290
291It is possible for the Perl subroutine you are calling to terminate
292abnormally, e.g., by calling I<die> explicitly or by not actually
293existing.  By default, when either of these events occurs, the
294process will terminate immediately.  If you want to trap this
295type of event, specify the G_EVAL flag.  It will put an I<eval { }>
296around the subroutine call.
297
298Whenever control returns from the I<call_*> function you need to
299check the C<$@> variable as you would in a normal Perl script.
300
301The value returned from the I<call_*> function is dependent on
302what other flags have been specified and whether an error has
303occurred.  Here are all the different cases that can occur:
304
305=over 5
306
307=item *
308
309If the I<call_*> function returns normally, then the value
310returned is as specified in the previous sections.
311
312=item *
313
314If G_DISCARD is specified, the return value will always be 0.
315
316=item *
317
318If G_LIST is specified I<and> an error has occurred, the return value
319will always be 0.
320
321=item *
322
323If G_SCALAR is specified I<and> an error has occurred, the return value
324will be 1 and the value on the top of the stack will be I<undef>. This
325means that if you have already detected the error by checking C<$@> and
326you want the program to continue, you must remember to pop the I<undef>
327from the stack.
328
329=back
330
331See L</Using G_EVAL> for details on using G_EVAL.
332
333=head2 G_KEEPERR
334
335=for apidoc AmnUh||G_KEEPERR
336
337Using the G_EVAL flag described above will always set C<$@>: clearing
338it if there was no error, and setting it to describe the error if there
339was an error in the called code.  This is what you want if your intention
340is to handle possible errors, but sometimes you just want to trap errors
341and stop them interfering with the rest of the program.
342
343This scenario will mostly be applicable to code that is meant to be called
344from within destructors, asynchronous callbacks, and signal handlers.
345In such situations, where the code being called has little relation to the
346surrounding dynamic context, the main program needs to be insulated from
347errors in the called code, even if they can't be handled intelligently.
348It may also be useful to do this with code for C<__DIE__> or C<__WARN__>
349hooks, and C<tie> functions.
350
351The G_KEEPERR flag is meant to be used in conjunction with G_EVAL in
352I<call_*> functions that are used to implement such code, or with
353C<eval_sv>.  This flag has no effect on the C<call_*> functions when
354G_EVAL is not used.
355
356When G_KEEPERR is used, any error in the called code will terminate the
357call as usual, and the error will not propagate beyond the call (as usual
358for G_EVAL), but it will not go into C<$@>.  Instead the error will be
359converted into a warning, prefixed with the string "\t(in cleanup)".
360This can be disabled using C<no warnings 'misc'>.  If there is no error,
361C<$@> will not be cleared.
362
363Note that the G_KEEPERR flag does not propagate into inner evals; these
364may still set C<$@>.
365
366The G_KEEPERR flag was introduced in Perl version 5.002.
367
368See L</Using G_KEEPERR> for an example of a situation that warrants the
369use of this flag.
370
371=head2 Determining the Context
372
373As mentioned above, you can determine the context of the currently
374executing subroutine in Perl with I<wantarray>.  The equivalent test
375can be made in C by using the C<GIMME_V> macro, which returns
376C<G_LIST> if you have been called in a list context, C<G_SCALAR> if
377in a scalar context, or C<G_VOID> if in a void context (i.e., the
378return value will not be used).  An older version of this macro is
379called C<GIMME>; in a void context it returns C<G_SCALAR> instead of
380C<G_VOID>.  An example of using the C<GIMME_V> macro is shown in
381section L</Using GIMME_V>.
382
383=head1 EXAMPLES
384
385Enough of the definition talk! Let's have a few examples.
386
387Perl provides many macros to assist in accessing the Perl stack.
388Wherever possible, these macros should always be used when interfacing
389to Perl internals.  We hope this should make the code less vulnerable
390to any changes made to Perl in the future.
391
392Another point worth noting is that in the first series of examples I
393have made use of only the I<call_pv> function.  This has been done
394to keep the code simpler and ease you into the topic.  Wherever
395possible, if the choice is between using I<call_pv> and
396I<call_sv>, you should always try to use I<call_sv>.  See
397L</Using call_sv> for details.
398
399=head2 No Parameters, Nothing Returned
400
401This first trivial example will call a Perl subroutine, I<PrintUID>, to
402print out the UID of the process.
403
404    sub PrintUID
405    {
406        print "UID is $<\n";
407    }
408
409and here is a C function to call it
410
411    static void
412    call_PrintUID()
413    {
414        dSP;
415
416        PUSHMARK(SP);
417        call_pv("PrintUID", G_DISCARD|G_NOARGS);
418    }
419
420Simple, eh?
421
422A few points to note about this example:
423
424=over 5
425
426=item 1.
427
428Ignore C<dSP> and C<PUSHMARK(SP)> for now. They will be discussed in
429the next example.
430
431=item 2.
432
433We aren't passing any parameters to I<PrintUID> so G_NOARGS can be
434specified.
435
436=item 3.
437
438We aren't interested in anything returned from I<PrintUID>, so
439G_DISCARD is specified. Even if I<PrintUID> was changed to
440return some value(s), having specified G_DISCARD will mean that they
441will be wiped by the time control returns from I<call_pv>.
442
443=item 4.
444
445As I<call_pv> is being used, the Perl subroutine is specified as a
446C string. In this case the subroutine name has been 'hard-wired' into the
447code.
448
449=item 5.
450
451Because we specified G_DISCARD, it is not necessary to check the value
452returned from I<call_pv>. It will always be 0.
453
454=back
455
456=head2 Passing Parameters
457
458Now let's make a slightly more complex example. This time we want to
459call a Perl subroutine, C<LeftString>, which will take 2 parameters--a
460string ($s) and an integer ($n).  The subroutine will simply
461print the first $n characters of the string.
462
463So the Perl subroutine would look like this:
464
465    sub LeftString
466    {
467        my($s, $n) = @_;
468        print substr($s, 0, $n), "\n";
469    }
470
471The C function required to call I<LeftString> would look like this:
472
473    static void
474    call_LeftString(a, b)
475    char * a;
476    int b;
477    {
478        dSP;
479
480	ENTER;
481        SAVETMPS;
482
483        PUSHMARK(SP);
484        EXTEND(SP, 2);
485        PUSHs(sv_2mortal(newSVpv(a, 0)));
486        PUSHs(sv_2mortal(newSViv(b)));
487        PUTBACK;
488
489        call_pv("LeftString", G_DISCARD);
490
491        FREETMPS;
492        LEAVE;
493    }
494
495Here are a few notes on the C function I<call_LeftString>.
496
497=over 5
498
499=item 1.
500
501Parameters are passed to the Perl subroutine using the Perl stack.
502This is the purpose of the code beginning with the line C<dSP> and
503ending with the line C<PUTBACK>.  The C<dSP> declares a local copy
504of the stack pointer.  This local copy should B<always> be accessed
505as C<SP>.
506
507=item 2.
508
509If you are going to put something onto the Perl stack, you need to know
510where to put it. This is the purpose of the macro C<dSP>--it declares
511and initializes a I<local> copy of the Perl stack pointer.
512
513All the other macros which will be used in this example require you to
514have used this macro.
515
516The exception to this rule is if you are calling a Perl subroutine
517directly from an XSUB function. In this case it is not necessary to
518use the C<dSP> macro explicitly--it will be declared for you
519automatically.
520
521=item 3.
522
523Any parameters to be pushed onto the stack should be bracketed by the
524C<PUSHMARK> and C<PUTBACK> macros.  The purpose of these two macros, in
525this context, is to count the number of parameters you are
526pushing automatically.  Then whenever Perl is creating the C<@_> array for the
527subroutine, it knows how big to make it.
528
529The C<PUSHMARK> macro tells Perl to make a mental note of the current
530stack pointer. Even if you aren't passing any parameters (like the
531example shown in the section L</No Parameters, Nothing Returned>) you
532must still call the C<PUSHMARK> macro before you can call any of the
533I<call_*> functions--Perl still needs to know that there are no
534parameters.
535
536The C<PUTBACK> macro sets the global copy of the stack pointer to be
537the same as our local copy. If we didn't do this, I<call_pv>
538wouldn't know where the two parameters we pushed were--remember that
539up to now all the stack pointer manipulation we have done is with our
540local copy, I<not> the global copy.
541
542=item 4.
543
544Next, we come to EXTEND and PUSHs. This is where the parameters
545actually get pushed onto the stack. In this case we are pushing a
546string and an integer.
547
548Alternatively you can use the XPUSHs() macro, which combines a
549C<EXTEND(SP, 1)> and C<PUSHs()>.  This is less efficient if you're
550pushing multiple values.
551
552See L<perlguts/"XSUBs and the Argument Stack"> for details
553on how the PUSH macros work.
554
555=item 5.
556
557Because we created temporary values (by means of sv_2mortal() calls)
558we will have to tidy up the Perl stack and dispose of mortal SVs.
559
560This is the purpose of
561
562    ENTER;
563    SAVETMPS;
564
565at the start of the function, and
566
567    FREETMPS;
568    LEAVE;
569
570at the end. The C<ENTER>/C<SAVETMPS> pair creates a boundary for any
571temporaries we create.  This means that the temporaries we get rid of
572will be limited to those which were created after these calls.
573
574The C<FREETMPS>/C<LEAVE> pair will get rid of any values returned by
575the Perl subroutine (see next example), plus it will also dump the
576mortal SVs we have created.  Having C<ENTER>/C<SAVETMPS> at the
577beginning of the code makes sure that no other mortals are destroyed.
578
579Think of these macros as working a bit like C<{> and C<}> in Perl
580to limit the scope of local variables.
581
582See the section L</Using Perl to Dispose of Temporaries> for details of
583an alternative to using these macros.
584
585=item 6.
586
587Finally, I<LeftString> can now be called via the I<call_pv> function.
588The only flag specified this time is G_DISCARD. Because we are passing
5892 parameters to the Perl subroutine this time, we have not specified
590G_NOARGS.
591
592=back
593
594=head2 Returning a Scalar
595
596Now for an example of dealing with the items returned from a Perl
597subroutine.
598
599Here is a Perl subroutine, I<Adder>, that takes 2 integer parameters
600and simply returns their sum.
601
602    sub Adder
603    {
604        my($a, $b) = @_;
605        $a + $b;
606    }
607
608Because we are now concerned with the return value from I<Adder>, the C
609function required to call it is now a bit more complex.
610
611    static void
612    call_Adder(a, b)
613    int a;
614    int b;
615    {
616        dSP;
617        int count;
618
619        ENTER;
620        SAVETMPS;
621
622        PUSHMARK(SP);
623        EXTEND(SP, 2);
624        PUSHs(sv_2mortal(newSViv(a)));
625        PUSHs(sv_2mortal(newSViv(b)));
626        PUTBACK;
627
628        count = call_pv("Adder", G_SCALAR);
629
630        SPAGAIN;
631
632        if (count != 1)
633            croak("Big trouble\n");
634
635        printf ("The sum of %d and %d is %d\n", a, b, POPi);
636
637        PUTBACK;
638        FREETMPS;
639        LEAVE;
640    }
641
642Points to note this time are
643
644=over 5
645
646=item 1.
647
648The only flag specified this time was G_SCALAR. That means that the C<@_>
649array will be created and that the value returned by I<Adder> will
650still exist after the call to I<call_pv>.
651
652=item 2.
653
654The purpose of the macro C<SPAGAIN> is to refresh the local copy of the
655stack pointer. This is necessary because it is possible that the memory
656allocated to the Perl stack has been reallocated during the
657I<call_pv> call.
658
659If you are making use of the Perl stack pointer in your code you must
660always refresh the local copy using SPAGAIN whenever you make use
661of the I<call_*> functions or any other Perl internal function.
662
663=item 3.
664
665Although only a single value was expected to be returned from I<Adder>,
666it is still good practice to check the return code from I<call_pv>
667anyway.
668
669Expecting a single value is not quite the same as knowing that there
670will be one. If someone modified I<Adder> to return a list and we
671didn't check for that possibility and take appropriate action the Perl
672stack would end up in an inconsistent state. That is something you
673I<really> don't want to happen ever.
674
675=item 4.
676
677The C<POPi> macro is used here to pop the return value from the stack.
678In this case we wanted an integer, so C<POPi> was used.
679
680
681Here is the complete list of POP macros available, along with the types
682they return.
683
684    POPs	SV
685    POPp	pointer (PV)
686    POPpbytex   pointer to bytes (PV)
687    POPn	double (NV)
688    POPi	integer (IV)
689    POPu        unsigned integer (UV)
690    POPl	long
691    POPul       unsigned long
692
693Since these macros have side-effects don't use them as arguments to
694macros that may evaluate their argument several times, for example:
695
696  /* Bad idea, don't do this */
697  STRLEN len;
698  const char *s = SvPV(POPs, len);
699
700Instead, use a temporary:
701
702  STRLEN len;
703  SV *sv = POPs;
704  const char *s = SvPV(sv, len);
705
706or a macro that guarantees it will evaluate its arguments only once:
707
708  STRLEN len;
709  const char *s = SvPVx(POPs, len);
710
711=item 5.
712
713The final C<PUTBACK> is used to leave the Perl stack in a consistent
714state before exiting the function.  This is necessary because when we
715popped the return value from the stack with C<POPi> it updated only our
716local copy of the stack pointer.  Remember, C<PUTBACK> sets the global
717stack pointer to be the same as our local copy.
718
719=back
720
721
722=head2 Returning a List of Values
723
724Now, let's extend the previous example to return both the sum of the
725parameters and the difference.
726
727Here is the Perl subroutine
728
729    sub AddSubtract
730    {
731       my($a, $b) = @_;
732       ($a+$b, $a-$b);
733    }
734
735and this is the C function
736
737    static void
738    call_AddSubtract(a, b)
739    int a;
740    int b;
741    {
742        dSP;
743        int count;
744
745        ENTER;
746        SAVETMPS;
747
748        PUSHMARK(SP);
749        EXTEND(SP, 2);
750        PUSHs(sv_2mortal(newSViv(a)));
751        PUSHs(sv_2mortal(newSViv(b)));
752        PUTBACK;
753
754        count = call_pv("AddSubtract", G_LIST);
755
756        SPAGAIN;
757
758        if (count != 2)
759            croak("Big trouble\n");
760
761        printf ("%d - %d = %d\n", a, b, POPi);
762        printf ("%d + %d = %d\n", a, b, POPi);
763
764        PUTBACK;
765        FREETMPS;
766        LEAVE;
767    }
768
769If I<call_AddSubtract> is called like this
770
771    call_AddSubtract(7, 4);
772
773then here is the output
774
775    7 - 4 = 3
776    7 + 4 = 11
777
778Notes
779
780=over 5
781
782=item 1.
783
784We wanted list context, so G_LIST was used.
785
786=item 2.
787
788Not surprisingly C<POPi> is used twice this time because we were
789retrieving 2 values from the stack. The important thing to note is that
790when using the C<POP*> macros they come off the stack in I<reverse>
791order.
792
793=back
794
795=head2 Returning a List in Scalar Context
796
797Say the Perl subroutine in the previous section was called in a scalar
798context, like this
799
800    static void
801    call_AddSubScalar(a, b)
802    int a;
803    int b;
804    {
805        dSP;
806        int count;
807        int i;
808
809        ENTER;
810        SAVETMPS;
811
812        PUSHMARK(SP);
813        EXTEND(SP, 2);
814        PUSHs(sv_2mortal(newSViv(a)));
815        PUSHs(sv_2mortal(newSViv(b)));
816        PUTBACK;
817
818        count = call_pv("AddSubtract", G_SCALAR);
819
820        SPAGAIN;
821
822        printf ("Items Returned = %d\n", count);
823
824        for (i = 1; i <= count; ++i)
825            printf ("Value %d = %d\n", i, POPi);
826
827        PUTBACK;
828        FREETMPS;
829        LEAVE;
830    }
831
832The other modification made is that I<call_AddSubScalar> will print the
833number of items returned from the Perl subroutine and their value (for
834simplicity it assumes that they are integer).  So if
835I<call_AddSubScalar> is called
836
837    call_AddSubScalar(7, 4);
838
839then the output will be
840
841    Items Returned = 1
842    Value 1 = 3
843
844In this case the main point to note is that only the last item in the
845list is returned from the subroutine. I<AddSubtract> actually made it back to
846I<call_AddSubScalar>.
847
848
849=head2 Returning Data from Perl via the Parameter List
850
851It is also possible to return values directly via the parameter
852list--whether it is actually desirable to do it is another matter entirely.
853
854The Perl subroutine, I<Inc>, below takes 2 parameters and increments
855each directly.
856
857    sub Inc
858    {
859        ++ $_[0];
860        ++ $_[1];
861    }
862
863and here is a C function to call it.
864
865    static void
866    call_Inc(a, b)
867    int a;
868    int b;
869    {
870        dSP;
871        int count;
872        SV * sva;
873        SV * svb;
874
875        ENTER;
876        SAVETMPS;
877
878        sva = sv_2mortal(newSViv(a));
879        svb = sv_2mortal(newSViv(b));
880
881        PUSHMARK(SP);
882        EXTEND(SP, 2);
883        PUSHs(sva);
884        PUSHs(svb);
885        PUTBACK;
886
887        count = call_pv("Inc", G_DISCARD);
888
889        if (count != 0)
890            croak ("call_Inc: expected 0 values from 'Inc', got %d\n",
891                   count);
892
893        printf ("%d + 1 = %d\n", a, SvIV(sva));
894        printf ("%d + 1 = %d\n", b, SvIV(svb));
895
896	FREETMPS;
897	LEAVE;
898    }
899
900To be able to access the two parameters that were pushed onto the stack
901after they return from I<call_pv> it is necessary to make a note
902of their addresses--thus the two variables C<sva> and C<svb>.
903
904The reason this is necessary is that the area of the Perl stack which
905held them will very likely have been overwritten by something else by
906the time control returns from I<call_pv>.
907
908
909
910
911=head2 Using G_EVAL
912
913Now an example using G_EVAL. Below is a Perl subroutine which computes
914the difference of its 2 parameters. If this would result in a negative
915result, the subroutine calls I<die>.
916
917    sub Subtract
918    {
919        my ($a, $b) = @_;
920
921        die "death can be fatal\n" if $a < $b;
922
923        $a - $b;
924    }
925
926and some C to call it
927
928 static void
929 call_Subtract(a, b)
930 int a;
931 int b;
932 {
933     dSP;
934     int count;
935     SV *err_tmp;
936
937     ENTER;
938     SAVETMPS;
939
940     PUSHMARK(SP);
941     EXTEND(SP, 2);
942     PUSHs(sv_2mortal(newSViv(a)));
943     PUSHs(sv_2mortal(newSViv(b)));
944     PUTBACK;
945
946     count = call_pv("Subtract", G_EVAL|G_SCALAR);
947
948     SPAGAIN;
949
950     /* Check the eval first */
951     err_tmp = ERRSV;
952     if (SvTRUE(err_tmp))
953     {
954         printf ("Uh oh - %s\n", SvPV_nolen(err_tmp));
955         POPs;
956     }
957     else
958     {
959       if (count != 1)
960        croak("call_Subtract: wanted 1 value from 'Subtract', got %d\n",
961              count);
962
963         printf ("%d - %d = %d\n", a, b, POPi);
964     }
965
966     PUTBACK;
967     FREETMPS;
968     LEAVE;
969 }
970
971If I<call_Subtract> is called thus
972
973    call_Subtract(4, 5)
974
975the following will be printed
976
977    Uh oh - death can be fatal
978
979Notes
980
981=over 5
982
983=item 1.
984
985We want to be able to catch the I<die> so we have used the G_EVAL
986flag.  Not specifying this flag would mean that the program would
987terminate immediately at the I<die> statement in the subroutine
988I<Subtract>.
989
990=item 2.
991
992The code
993
994    err_tmp = ERRSV;
995    if (SvTRUE(err_tmp))
996    {
997        printf ("Uh oh - %s\n", SvPV_nolen(err_tmp));
998        POPs;
999    }
1000
1001is the direct equivalent of this bit of Perl
1002
1003    print "Uh oh - $@\n" if $@;
1004
1005C<PL_errgv> is a perl global of type C<GV *> that points to the symbol
1006table entry containing the error.  C<ERRSV> therefore refers to the C
1007equivalent of C<$@>.  We use a local temporary, C<err_tmp>, since
1008C<ERRSV> is a macro that calls a function, and C<SvTRUE(ERRSV)> would
1009end up calling that function multiple times.
1010
1011=for apidoc AmnUh|GV *|PL_errgv
1012
1013=item 3.
1014
1015Note that the stack is popped using C<POPs> in the block where
1016C<SvTRUE(err_tmp)> is true.  This is necessary because whenever a
1017I<call_*> function invoked with G_EVAL|G_SCALAR returns an error,
1018the top of the stack holds the value I<undef>. Because we want the
1019program to continue after detecting this error, it is essential that
1020the stack be tidied up by removing the I<undef>.
1021
1022=back
1023
1024
1025=head2 Using G_KEEPERR
1026
1027Consider this rather facetious example, where we have used an XS
1028version of the call_Subtract example above inside a destructor:
1029
1030    package Foo;
1031    sub new { bless {}, $_[0] }
1032    sub Subtract {
1033        my($a,$b) = @_;
1034        die "death can be fatal" if $a < $b;
1035        $a - $b;
1036    }
1037    sub DESTROY { call_Subtract(5, 4); }
1038    sub foo { die "foo dies"; }
1039
1040    package main;
1041    {
1042	my $foo = Foo->new;
1043	eval { $foo->foo };
1044    }
1045    print "Saw: $@" if $@;             # should be, but isn't
1046
1047This example will fail to recognize that an error occurred inside the
1048C<eval {}>.  Here's why: the call_Subtract code got executed while perl
1049was cleaning up temporaries when exiting the outer braced block, and because
1050call_Subtract is implemented with I<call_pv> using the G_EVAL
1051flag, it promptly reset C<$@>.  This results in the failure of the
1052outermost test for C<$@>, and thereby the failure of the error trap.
1053
1054Appending the G_KEEPERR flag, so that the I<call_pv> call in
1055call_Subtract reads:
1056
1057        count = call_pv("Subtract", G_EVAL|G_SCALAR|G_KEEPERR);
1058
1059will preserve the error and restore reliable error handling.
1060
1061=head2 Using call_sv
1062
1063In all the previous examples I have 'hard-wired' the name of the Perl
1064subroutine to be called from C.  Most of the time though, it is more
1065convenient to be able to specify the name of the Perl subroutine from
1066within the Perl script, and you'll want to use
1067L<call_sv|perlapi/call_sv>.
1068
1069Consider the Perl code below
1070
1071    sub fred
1072    {
1073        print "Hello there\n";
1074    }
1075
1076    CallSubPV("fred");
1077
1078Here is a snippet of XSUB which defines I<CallSubPV>.
1079
1080    void
1081    CallSubPV(name)
1082    	char *	name
1083    	CODE:
1084	PUSHMARK(SP);
1085	call_pv(name, G_DISCARD|G_NOARGS);
1086
1087That is fine as far as it goes. The thing is, the Perl subroutine
1088can be specified as only a string, however, Perl allows references
1089to subroutines and anonymous subroutines.
1090This is where I<call_sv> is useful.
1091
1092The code below for I<CallSubSV> is identical to I<CallSubPV> except
1093that the C<name> parameter is now defined as an SV* and we use
1094I<call_sv> instead of I<call_pv>.
1095
1096    void
1097    CallSubSV(name)
1098    	SV *	name
1099    	CODE:
1100	PUSHMARK(SP);
1101	call_sv(name, G_DISCARD|G_NOARGS);
1102
1103Because we are using an SV to call I<fred> the following can all be used:
1104
1105    CallSubSV("fred");
1106    CallSubSV(\&fred);
1107    $ref = \&fred;
1108    CallSubSV($ref);
1109    CallSubSV( sub { print "Hello there\n" } );
1110
1111As you can see, I<call_sv> gives you much greater flexibility in
1112how you can specify the Perl subroutine.
1113
1114You should note that, if it is necessary to store the SV (C<name> in the
1115example above) which corresponds to the Perl subroutine so that it can
1116be used later in the program, it not enough just to store a copy of the
1117pointer to the SV. Say the code above had been like this:
1118
1119    static SV * rememberSub;
1120
1121    void
1122    SaveSub1(name)
1123    	SV *	name
1124    	CODE:
1125	rememberSub = name;
1126
1127    void
1128    CallSavedSub1()
1129    	CODE:
1130	PUSHMARK(SP);
1131	call_sv(rememberSub, G_DISCARD|G_NOARGS);
1132
1133The reason this is wrong is that, by the time you come to use the
1134pointer C<rememberSub> in C<CallSavedSub1>, it may or may not still refer
1135to the Perl subroutine that was recorded in C<SaveSub1>.  This is
1136particularly true for these cases:
1137
1138    SaveSub1(\&fred);
1139    CallSavedSub1();
1140
1141    SaveSub1( sub { print "Hello there\n" } );
1142    CallSavedSub1();
1143
1144By the time each of the C<SaveSub1> statements above has been executed,
1145the SV*s which corresponded to the parameters will no longer exist.
1146Expect an error message from Perl of the form
1147
1148    Can't use an undefined value as a subroutine reference at ...
1149
1150for each of the C<CallSavedSub1> lines.
1151
1152Similarly, with this code
1153
1154    $ref = \&fred;
1155    SaveSub1($ref);
1156    $ref = 47;
1157    CallSavedSub1();
1158
1159you can expect one of these messages (which you actually get is dependent on
1160the version of Perl you are using)
1161
1162    Not a CODE reference at ...
1163    Undefined subroutine &main::47 called ...
1164
1165The variable $ref may have referred to the subroutine C<fred>
1166whenever the call to C<SaveSub1> was made but by the time
1167C<CallSavedSub1> gets called it now holds the number C<47>. Because we
1168saved only a pointer to the original SV in C<SaveSub1>, any changes to
1169$ref will be tracked by the pointer C<rememberSub>. This means that
1170whenever C<CallSavedSub1> gets called, it will attempt to execute the
1171code which is referenced by the SV* C<rememberSub>.  In this case
1172though, it now refers to the integer C<47>, so expect Perl to complain
1173loudly.
1174
1175A similar but more subtle problem is illustrated with this code:
1176
1177    $ref = \&fred;
1178    SaveSub1($ref);
1179    $ref = \&joe;
1180    CallSavedSub1();
1181
1182This time whenever C<CallSavedSub1> gets called it will execute the Perl
1183subroutine C<joe> (assuming it exists) rather than C<fred> as was
1184originally requested in the call to C<SaveSub1>.
1185
1186To get around these problems it is necessary to take a full copy of the
1187SV.  The code below shows C<SaveSub2> modified to do that.
1188
1189    /* this isn't thread-safe */
1190    static SV * keepSub = (SV*)NULL;
1191
1192    void
1193    SaveSub2(name)
1194        SV *	name
1195    	CODE:
1196     	/* Take a copy of the callback */
1197    	if (keepSub == (SV*)NULL)
1198    	    /* First time, so create a new SV */
1199	    keepSub = newSVsv(name);
1200    	else
1201    	    /* Been here before, so overwrite */
1202	    SvSetSV(keepSub, name);
1203
1204    void
1205    CallSavedSub2()
1206    	CODE:
1207	PUSHMARK(SP);
1208	call_sv(keepSub, G_DISCARD|G_NOARGS);
1209
1210To avoid creating a new SV every time C<SaveSub2> is called,
1211the function first checks to see if it has been called before.  If not,
1212then space for a new SV is allocated and the reference to the Perl
1213subroutine C<name> is copied to the variable C<keepSub> in one
1214operation using C<newSVsv>.  Thereafter, whenever C<SaveSub2> is called,
1215the existing SV, C<keepSub>, is overwritten with the new value using
1216C<SvSetSV>.
1217
1218Note: using a static or global variable to store the SV isn't
1219thread-safe.  You can either use the C<MY_CXT> mechanism documented in
1220L<perlxs/Safely Storing Static Data in XS> which is fast, or store the
1221values in perl global variables, using get_sv(), which is much slower.
1222
1223=head2 Using call_argv
1224
1225Here is a Perl subroutine which prints whatever parameters are passed
1226to it.
1227
1228    sub PrintList
1229    {
1230        my(@list) = @_;
1231
1232        foreach (@list) { print "$_\n" }
1233    }
1234
1235And here is an example of I<call_argv> which will call
1236I<PrintList>.
1237
1238    static char * words[] = {"alpha", "beta", "gamma", "delta", NULL};
1239
1240    static void
1241    call_PrintList()
1242    {
1243        call_argv("PrintList", G_DISCARD, words);
1244    }
1245
1246Note that it is not necessary to call C<PUSHMARK> in this instance.
1247This is because I<call_argv> will do it for you.
1248
1249=head2 Using call_method
1250
1251Consider the following Perl code:
1252
1253    {
1254        package Mine;
1255
1256        sub new
1257        {
1258            my($type) = shift;
1259            bless [@_]
1260        }
1261
1262        sub Display
1263        {
1264            my ($self, $index) = @_;
1265            print "$index: $$self[$index]\n";
1266        }
1267
1268        sub PrintID
1269        {
1270            my($class) = @_;
1271            print "This is Class $class version 1.0\n";
1272        }
1273    }
1274
1275It implements just a very simple class to manage an array.  Apart from
1276the constructor, C<new>, it declares methods, one static and one
1277virtual. The static method, C<PrintID>, prints out simply the class
1278name and a version number. The virtual method, C<Display>, prints out a
1279single element of the array.  Here is an all-Perl example of using it.
1280
1281    $a = Mine->new('red', 'green', 'blue');
1282    $a->Display(1);
1283    Mine->PrintID;
1284
1285will print
1286
1287    1: green
1288    This is Class Mine version 1.0
1289
1290Calling a Perl method from C is fairly straightforward. The following
1291things are required:
1292
1293=over 5
1294
1295=item *
1296
1297A reference to the object for a virtual method or the name of the class
1298for a static method
1299
1300=item *
1301
1302The name of the method
1303
1304=item *
1305
1306Any other parameters specific to the method
1307
1308=back
1309
1310Here is a simple XSUB which illustrates the mechanics of calling both
1311the C<PrintID> and C<Display> methods from C.
1312
1313    void
1314    call_Method(ref, method, index)
1315        SV *	ref
1316        char *	method
1317        int		index
1318        CODE:
1319        PUSHMARK(SP);
1320        EXTEND(SP, 2);
1321        PUSHs(ref);
1322        PUSHs(sv_2mortal(newSViv(index)));
1323        PUTBACK;
1324
1325        call_method(method, G_DISCARD);
1326
1327    void
1328    call_PrintID(class, method)
1329        char *	class
1330        char *	method
1331        CODE:
1332        PUSHMARK(SP);
1333        XPUSHs(sv_2mortal(newSVpv(class, 0)));
1334        PUTBACK;
1335
1336        call_method(method, G_DISCARD);
1337
1338
1339So the methods C<PrintID> and C<Display> can be invoked like this:
1340
1341    $a = Mine->new('red', 'green', 'blue');
1342    call_Method($a, 'Display', 1);
1343    call_PrintID('Mine', 'PrintID');
1344
1345The only thing to note is that, in both the static and virtual methods,
1346the method name is not passed via the stack--it is used as the first
1347parameter to I<call_method>.
1348
1349=head2 Using GIMME_V
1350
1351Here is a trivial XSUB which prints the context in which it is
1352currently executing.
1353
1354    void
1355    PrintContext()
1356        CODE:
1357        U8 gimme = GIMME_V;
1358        if (gimme == G_VOID)
1359            printf ("Context is Void\n");
1360        else if (gimme == G_SCALAR)
1361            printf ("Context is Scalar\n");
1362        else
1363            printf ("Context is Array\n");
1364
1365And here is some Perl to test it.
1366
1367    PrintContext;
1368    $a = PrintContext;
1369    @a = PrintContext;
1370
1371The output from that will be
1372
1373    Context is Void
1374    Context is Scalar
1375    Context is Array
1376
1377=head2 Using Perl to Dispose of Temporaries
1378
1379In the examples given to date, any temporaries created in the callback
1380(i.e., parameters passed on the stack to the I<call_*> function or
1381values returned via the stack) have been freed by one of these methods:
1382
1383=over 5
1384
1385=item *
1386
1387Specifying the G_DISCARD flag with I<call_*>
1388
1389=item *
1390
1391Explicitly using the C<ENTER>/C<SAVETMPS>--C<FREETMPS>/C<LEAVE> pairing
1392
1393=back
1394
1395There is another method which can be used, namely letting Perl do it
1396for you automatically whenever it regains control after the callback
1397has terminated.  This is done by simply not using the
1398
1399    ENTER;
1400    SAVETMPS;
1401    ...
1402    FREETMPS;
1403    LEAVE;
1404
1405sequence in the callback (and not, of course, specifying the G_DISCARD
1406flag).
1407
1408If you are going to use this method you have to be aware of a possible
1409memory leak which can arise under very specific circumstances.  To
1410explain these circumstances you need to know a bit about the flow of
1411control between Perl and the callback routine.
1412
1413The examples given at the start of the document (an error handler and
1414an event driven program) are typical of the two main sorts of flow
1415control that you are likely to encounter with callbacks.  There is a
1416very important distinction between them, so pay attention.
1417
1418In the first example, an error handler, the flow of control could be as
1419follows.  You have created an interface to an external library.
1420Control can reach the external library like this
1421
1422    perl --> XSUB --> external library
1423
1424Whilst control is in the library, an error condition occurs. You have
1425previously set up a Perl callback to handle this situation, so it will
1426get executed. Once the callback has finished, control will drop back to
1427Perl again.  Here is what the flow of control will be like in that
1428situation
1429
1430    perl --> XSUB --> external library
1431                      ...
1432                      error occurs
1433                      ...
1434                      external library --> call_* --> perl
1435                                                          |
1436    perl <-- XSUB <-- external library <-- call_* <----+
1437
1438After processing of the error using I<call_*> is completed,
1439control reverts back to Perl more or less immediately.
1440
1441In the diagram, the further right you go the more deeply nested the
1442scope is.  It is only when control is back with perl on the extreme
1443left of the diagram that you will have dropped back to the enclosing
1444scope and any temporaries you have left hanging around will be freed.
1445
1446In the second example, an event driven program, the flow of control
1447will be more like this
1448
1449    perl --> XSUB --> event handler
1450                      ...
1451                      event handler --> call_* --> perl
1452                                                       |
1453                      event handler <-- call_* <----+
1454                      ...
1455                      event handler --> call_* --> perl
1456                                                       |
1457                      event handler <-- call_* <----+
1458                      ...
1459                      event handler --> call_* --> perl
1460                                                       |
1461                      event handler <-- call_* <----+
1462
1463In this case the flow of control can consist of only the repeated
1464sequence
1465
1466    event handler --> call_* --> perl
1467
1468for practically the complete duration of the program.  This means that
1469control may I<never> drop back to the surrounding scope in Perl at the
1470extreme left.
1471
1472So what is the big problem? Well, if you are expecting Perl to tidy up
1473those temporaries for you, you might be in for a long wait.  For Perl
1474to dispose of your temporaries, control must drop back to the
1475enclosing scope at some stage.  In the event driven scenario that may
1476never happen.  This means that, as time goes on, your program will
1477create more and more temporaries, none of which will ever be freed. As
1478each of these temporaries consumes some memory your program will
1479eventually consume all the available memory in your system--kapow!
1480
1481So here is the bottom line--if you are sure that control will revert
1482back to the enclosing Perl scope fairly quickly after the end of your
1483callback, then it isn't absolutely necessary to dispose explicitly of
1484any temporaries you may have created. Mind you, if you are at all
1485uncertain about what to do, it doesn't do any harm to tidy up anyway.
1486
1487
1488=head2 Strategies for Storing Callback Context Information
1489
1490
1491Potentially one of the trickiest problems to overcome when designing a
1492callback interface can be figuring out how to store the mapping between
1493the C callback function and the Perl equivalent.
1494
1495To help understand why this can be a real problem first consider how a
1496callback is set up in an all C environment.  Typically a C API will
1497provide a function to register a callback.  This will expect a pointer
1498to a function as one of its parameters.  Below is a call to a
1499hypothetical function C<register_fatal> which registers the C function
1500to get called when a fatal error occurs.
1501
1502    register_fatal(cb1);
1503
1504The single parameter C<cb1> is a pointer to a function, so you must
1505have defined C<cb1> in your code, say something like this
1506
1507    static void
1508    cb1()
1509    {
1510        printf ("Fatal Error\n");
1511        exit(1);
1512    }
1513
1514Now change that to call a Perl subroutine instead
1515
1516    static SV * callback = (SV*)NULL;
1517
1518    static void
1519    cb1()
1520    {
1521        dSP;
1522
1523        PUSHMARK(SP);
1524
1525        /* Call the Perl sub to process the callback */
1526        call_sv(callback, G_DISCARD);
1527    }
1528
1529
1530    void
1531    register_fatal(fn)
1532        SV *	fn
1533        CODE:
1534        /* Remember the Perl sub */
1535        if (callback == (SV*)NULL)
1536            callback = newSVsv(fn);
1537        else
1538            SvSetSV(callback, fn);
1539
1540        /* register the callback with the external library */
1541        register_fatal(cb1);
1542
1543where the Perl equivalent of C<register_fatal> and the callback it
1544registers, C<pcb1>, might look like this
1545
1546    # Register the sub pcb1
1547    register_fatal(\&pcb1);
1548
1549    sub pcb1
1550    {
1551        die "I'm dying...\n";
1552    }
1553
1554The mapping between the C callback and the Perl equivalent is stored in
1555the global variable C<callback>.
1556
1557This will be adequate if you ever need to have only one callback
1558registered at any time. An example could be an error handler like the
1559code sketched out above. Remember though, repeated calls to
1560C<register_fatal> will replace the previously registered callback
1561function with the new one.
1562
1563Say for example you want to interface to a library which allows asynchronous
1564file i/o.  In this case you may be able to register a callback whenever
1565a read operation has completed. To be of any use we want to be able to
1566call separate Perl subroutines for each file that is opened.  As it
1567stands, the error handler example above would not be adequate as it
1568allows only a single callback to be defined at any time. What we
1569require is a means of storing the mapping between the opened file and
1570the Perl subroutine we want to be called for that file.
1571
1572Say the i/o library has a function C<asynch_read> which associates a C
1573function C<ProcessRead> with a file handle C<fh>--this assumes that it
1574has also provided some routine to open the file and so obtain the file
1575handle.
1576
1577    asynch_read(fh, ProcessRead)
1578
1579This may expect the C I<ProcessRead> function of this form
1580
1581    void
1582    ProcessRead(fh, buffer)
1583    int	fh;
1584    char *	buffer;
1585    {
1586         ...
1587    }
1588
1589To provide a Perl interface to this library we need to be able to map
1590between the C<fh> parameter and the Perl subroutine we want called.  A
1591hash is a convenient mechanism for storing this mapping.  The code
1592below shows a possible implementation
1593
1594    static HV * Mapping = (HV*)NULL;
1595
1596    void
1597    asynch_read(fh, callback)
1598        int	fh
1599        SV *	callback
1600        CODE:
1601        /* If the hash doesn't already exist, create it */
1602        if (Mapping == (HV*)NULL)
1603            Mapping = newHV();
1604
1605        /* Save the fh -> callback mapping */
1606        hv_store(Mapping, (char*)&fh, sizeof(fh), newSVsv(callback), 0);
1607
1608        /* Register with the C Library */
1609        asynch_read(fh, asynch_read_if);
1610
1611and C<asynch_read_if> could look like this
1612
1613    static void
1614    asynch_read_if(fh, buffer)
1615    int	fh;
1616    char *	buffer;
1617    {
1618        dSP;
1619        SV ** sv;
1620
1621        /* Get the callback associated with fh */
1622        sv =  hv_fetch(Mapping, (char*)&fh , sizeof(fh), FALSE);
1623        if (sv == (SV**)NULL)
1624            croak("Internal error...\n");
1625
1626        PUSHMARK(SP);
1627        EXTEND(SP, 2);
1628        PUSHs(sv_2mortal(newSViv(fh)));
1629        PUSHs(sv_2mortal(newSVpv(buffer, 0)));
1630        PUTBACK;
1631
1632        /* Call the Perl sub */
1633        call_sv(*sv, G_DISCARD);
1634    }
1635
1636For completeness, here is C<asynch_close>.  This shows how to remove
1637the entry from the hash C<Mapping>.
1638
1639    void
1640    asynch_close(fh)
1641        int	fh
1642        CODE:
1643        /* Remove the entry from the hash */
1644        (void) hv_delete(Mapping, (char*)&fh, sizeof(fh), G_DISCARD);
1645
1646        /* Now call the real asynch_close */
1647        asynch_close(fh);
1648
1649So the Perl interface would look like this
1650
1651    sub callback1
1652    {
1653        my($handle, $buffer) = @_;
1654    }
1655
1656    # Register the Perl callback
1657    asynch_read($fh, \&callback1);
1658
1659    asynch_close($fh);
1660
1661The mapping between the C callback and Perl is stored in the global
1662hash C<Mapping> this time. Using a hash has the distinct advantage that
1663it allows an unlimited number of callbacks to be registered.
1664
1665What if the interface provided by the C callback doesn't contain a
1666parameter which allows the file handle to Perl subroutine mapping?  Say
1667in the asynchronous i/o package, the callback function gets passed only
1668the C<buffer> parameter like this
1669
1670    void
1671    ProcessRead(buffer)
1672    char *	buffer;
1673    {
1674        ...
1675    }
1676
1677Without the file handle there is no straightforward way to map from the
1678C callback to the Perl subroutine.
1679
1680In this case a possible way around this problem is to predefine a
1681series of C functions to act as the interface to Perl, thus
1682
1683    #define MAX_CB		3
1684    #define NULL_HANDLE	-1
1685    typedef void (*FnMap)();
1686
1687    struct MapStruct {
1688        FnMap    Function;
1689        SV *     PerlSub;
1690        int      Handle;
1691      };
1692
1693    static void  fn1();
1694    static void  fn2();
1695    static void  fn3();
1696
1697    static struct MapStruct Map [MAX_CB] =
1698        {
1699            { fn1, NULL, NULL_HANDLE },
1700            { fn2, NULL, NULL_HANDLE },
1701            { fn3, NULL, NULL_HANDLE }
1702        };
1703
1704    static void
1705    Pcb(index, buffer)
1706    int index;
1707    char * buffer;
1708    {
1709        dSP;
1710
1711        PUSHMARK(SP);
1712        XPUSHs(sv_2mortal(newSVpv(buffer, 0)));
1713        PUTBACK;
1714
1715        /* Call the Perl sub */
1716        call_sv(Map[index].PerlSub, G_DISCARD);
1717    }
1718
1719    static void
1720    fn1(buffer)
1721    char * buffer;
1722    {
1723        Pcb(0, buffer);
1724    }
1725
1726    static void
1727    fn2(buffer)
1728    char * buffer;
1729    {
1730        Pcb(1, buffer);
1731    }
1732
1733    static void
1734    fn3(buffer)
1735    char * buffer;
1736    {
1737        Pcb(2, buffer);
1738    }
1739
1740    void
1741    array_asynch_read(fh, callback)
1742        int		fh
1743        SV *	callback
1744        CODE:
1745        int index;
1746        int null_index = MAX_CB;
1747
1748        /* Find the same handle or an empty entry */
1749        for (index = 0; index < MAX_CB; ++index)
1750        {
1751            if (Map[index].Handle == fh)
1752                break;
1753
1754            if (Map[index].Handle == NULL_HANDLE)
1755                null_index = index;
1756        }
1757
1758        if (index == MAX_CB && null_index == MAX_CB)
1759            croak ("Too many callback functions registered\n");
1760
1761        if (index == MAX_CB)
1762            index = null_index;
1763
1764        /* Save the file handle */
1765        Map[index].Handle = fh;
1766
1767        /* Remember the Perl sub */
1768        if (Map[index].PerlSub == (SV*)NULL)
1769            Map[index].PerlSub = newSVsv(callback);
1770        else
1771            SvSetSV(Map[index].PerlSub, callback);
1772
1773        asynch_read(fh, Map[index].Function);
1774
1775    void
1776    array_asynch_close(fh)
1777        int	fh
1778        CODE:
1779        int index;
1780
1781        /* Find the file handle */
1782        for (index = 0; index < MAX_CB; ++ index)
1783            if (Map[index].Handle == fh)
1784                break;
1785
1786        if (index == MAX_CB)
1787            croak ("could not close fh %d\n", fh);
1788
1789        Map[index].Handle = NULL_HANDLE;
1790        SvREFCNT_dec(Map[index].PerlSub);
1791        Map[index].PerlSub = (SV*)NULL;
1792
1793        asynch_close(fh);
1794
1795In this case the functions C<fn1>, C<fn2>, and C<fn3> are used to
1796remember the Perl subroutine to be called. Each of the functions holds
1797a separate hard-wired index which is used in the function C<Pcb> to
1798access the C<Map> array and actually call the Perl subroutine.
1799
1800There are some obvious disadvantages with this technique.
1801
1802Firstly, the code is considerably more complex than with the previous
1803example.
1804
1805Secondly, there is a hard-wired limit (in this case 3) to the number of
1806callbacks that can exist simultaneously. The only way to increase the
1807limit is by modifying the code to add more functions and then
1808recompiling.  None the less, as long as the number of functions is
1809chosen with some care, it is still a workable solution and in some
1810cases is the only one available.
1811
1812To summarize, here are a number of possible methods for you to consider
1813for storing the mapping between C and the Perl callback
1814
1815=over 5
1816
1817=item 1. Ignore the problem - Allow only 1 callback
1818
1819For a lot of situations, like interfacing to an error handler, this may
1820be a perfectly adequate solution.
1821
1822=item 2. Create a sequence of callbacks - hard wired limit
1823
1824If it is impossible to tell from the parameters passed back from the C
1825callback what the context is, then you may need to create a sequence of C
1826callback interface functions, and store pointers to each in an array.
1827
1828=item 3. Use a parameter to map to the Perl callback
1829
1830A hash is an ideal mechanism to store the mapping between C and Perl.
1831
1832=back
1833
1834
1835=head2 Alternate Stack Manipulation
1836
1837
1838Although I have made use of only the C<POP*> macros to access values
1839returned from Perl subroutines, it is also possible to bypass these
1840macros and read the stack using the C<ST> macro (See L<perlxs> for a
1841full description of the C<ST> macro).
1842
1843Most of the time the C<POP*> macros should be adequate; the main
1844problem with them is that they force you to process the returned values
1845in sequence. This may not be the most suitable way to process the
1846values in some cases. What we want is to be able to access the stack in
1847a random order. The C<ST> macro as used when coding an XSUB is ideal
1848for this purpose.
1849
1850The code below is the example given in the section L</Returning a List
1851of Values> recoded to use C<ST> instead of C<POP*>.
1852
1853    static void
1854    call_AddSubtract2(a, b)
1855    int a;
1856    int b;
1857    {
1858        dSP;
1859        I32 ax;
1860        int count;
1861
1862        ENTER;
1863        SAVETMPS;
1864
1865        PUSHMARK(SP);
1866        EXTEND(SP, 2);
1867        PUSHs(sv_2mortal(newSViv(a)));
1868        PUSHs(sv_2mortal(newSViv(b)));
1869        PUTBACK;
1870
1871        count = call_pv("AddSubtract", G_LIST);
1872
1873        SPAGAIN;
1874        SP -= count;
1875        ax = (SP - PL_stack_base) + 1;
1876
1877        if (count != 2)
1878            croak("Big trouble\n");
1879
1880        printf ("%d + %d = %d\n", a, b, SvIV(ST(0)));
1881        printf ("%d - %d = %d\n", a, b, SvIV(ST(1)));
1882
1883        PUTBACK;
1884        FREETMPS;
1885        LEAVE;
1886    }
1887
1888Notes
1889
1890=over 5
1891
1892=item 1.
1893
1894Notice that it was necessary to define the variable C<ax>.  This is
1895because the C<ST> macro expects it to exist.  If we were in an XSUB it
1896would not be necessary to define C<ax> as it is already defined for
1897us.
1898
1899=item 2.
1900
1901The code
1902
1903        SPAGAIN;
1904        SP -= count;
1905        ax = (SP - PL_stack_base) + 1;
1906
1907sets the stack up so that we can use the C<ST> macro.
1908
1909=item 3.
1910
1911Unlike the original coding of this example, the returned
1912values are not accessed in reverse order.  So C<ST(0)> refers to the
1913first value returned by the Perl subroutine and C<ST(count-1)>
1914refers to the last.
1915
1916=back
1917
1918=head2 Creating and Calling an Anonymous Subroutine in C
1919
1920As we've already shown, C<call_sv> can be used to invoke an
1921anonymous subroutine.  However, our example showed a Perl script
1922invoking an XSUB to perform this operation.  Let's see how it can be
1923done inside our C code:
1924
1925 ...
1926
1927 SV *cvrv
1928    = eval_pv("sub {
1929                print 'You will not find me cluttering any namespace!'
1930               }", TRUE);
1931
1932 ...
1933
1934 call_sv(cvrv, G_VOID|G_NOARGS);
1935
1936C<eval_pv> is used to compile the anonymous subroutine, which
1937will be the return value as well (read more about C<eval_pv> in
1938L<perlapi/eval_pv>).  Once this code reference is in hand, it
1939can be mixed in with all the previous examples we've shown.
1940
1941=head1 LIGHTWEIGHT CALLBACKS
1942
1943Sometimes you need to invoke the same subroutine repeatedly.
1944This usually happens with a function that acts on a list of
1945values, such as Perl's built-in sort(). You can pass a
1946comparison function to sort(), which will then be invoked
1947for every pair of values that needs to be compared. The first()
1948and reduce() functions from L<List::Util> follow a similar
1949pattern.
1950
1951In this case it is possible to speed up the routine (often
1952quite substantially) by using the lightweight callback API.
1953The idea is that the calling context only needs to be
1954created and destroyed once, and the sub can be called
1955arbitrarily many times in between.
1956
1957It is usual to pass parameters using global variables (typically
1958$_ for one parameter, or $a and $b for two parameters) rather
1959than via @_. (It is possible to use the @_ mechanism if you know
1960what you're doing, though there is as yet no supported API for
1961it. It's also inherently slower.)
1962
1963The pattern of macro calls is like this:
1964
1965    dMULTICALL;			/* Declare local variables */
1966    U8 gimme = G_SCALAR;	/* context of the call: G_SCALAR,
1967				 * G_LIST, or G_VOID */
1968
1969    PUSH_MULTICALL(cv);		/* Set up the context for calling cv,
1970				   and set local vars appropriately */
1971
1972    /* loop */ {
1973        /* set the value(s) af your parameter variables */
1974        MULTICALL;		/* Make the actual call */
1975    } /* end of loop */
1976
1977    POP_MULTICALL;		/* Tear down the calling context */
1978
1979For some concrete examples, see the implementation of the
1980first() and reduce() functions of List::Util 1.18. There you
1981will also find a header file that emulates the multicall API
1982on older versions of perl.
1983
1984=head1 SEE ALSO
1985
1986L<perlxs>, L<perlguts>, L<perlembed>
1987
1988=head1 AUTHOR
1989
1990Paul Marquess
1991
1992Special thanks to the following people who assisted in the creation of
1993the document.
1994
1995Jeff Okamoto, Tim Bunce, Nick Gianniotis, Steve Kelem, Gurusamy Sarathy
1996and Larry Wall.
1997
1998=head1 DATE
1999
2000Last updated for perl 5.23.1.
2001