X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=pod%2Fperlpragma.pod;h=12e8124d0c1cb310b7bfd50901f582374c44960c;hb=d7d7d533fb289d8ec4fa1b5fb02f927ed0cb90cc;hp=9c4fd2b082c50435b69832e8db570a018279efc4;hpb=f4cfebf967017dba26f01e563d0a7a4c1797e4d4;p=p5sagit%2Fp5-mst-13.2.git diff --git a/pod/perlpragma.pod b/pod/perlpragma.pod index 9c4fd2b..12e8124 100644 --- a/pod/perlpragma.pod +++ b/pod/perlpragma.pod @@ -34,7 +34,7 @@ functions much like C You'd like this code no myint; print "E: ", $l + $r, "\n"; - + to give the output A: 4.6 @@ -71,13 +71,13 @@ this: 1; -Note how we load the user pragma C with C<()> to prevent its C -being called. - -The interaction with the Perl compile happens inside package C: +Note how we load the user pragma C with an empty list C<()> to +prevent its C being called. -package myint; +The interaction with the Perl compilation happens inside package C: + package myint; + use strict; use warnings; @@ -115,21 +115,23 @@ and C is Hence the C and C routines are called at B for the user's code. -User pragmata store their state by writing to C<%^H>, hence these two -routines manipulate C<%^H>. The state information in C<%^H> is stored in the -optree, and can be retrieved at runtime with C, at index 10 of the -list of returned results. In the example pragma, retrieval is encapsulated -into the routine C. This uses C to determine the -state of C<$^H{myint}> when each line of the user's script was called, and +User pragmata store their state by writing to the magical hash C<%^H>, +hence these two routines manipulate it. The state information in C<%^H> is +stored in the optree, and can be retrieved at runtime with C, at +index 10 of the list of returned results. In the example pragma, retrieval +is encapsulated into the routine C, which takes as parameter +the number of call frames to go up to find the value of the pragma in the +user's script. This uses C to determine the value of +C<$^H{myint}> when each line of the user's script was called, and therefore provide the correct semantics in the subroutine implementing the overloaded addition. =head1 Implementation details -The optree is shared between threads, which means there is a possibility that -the optree will outlive the particular thread (and therefore interpreter +The optree is shared between threads. This means there is a possibility that +the optree will outlive the particular thread (and therefore the interpreter instance) that created it, so true Perl scalars cannot be stored in the -optree. Instead a compact form is used, which can only store values that are +optree. Instead a compact form is used, which can only store values that are integers (signed and unsigned), strings or C - references and floating point values are stringified. If you need to store multiple values or complex structures, you should serialise them, for example with C.