diff options
Diffstat (limited to 'pod')
-rw-r--r-- | pod/perlfunc.pod | 1 | ||||
-rw-r--r-- | pod/perlguts.pod | 185 | ||||
-rw-r--r-- | pod/perlhist.pod | 451 | ||||
-rw-r--r-- | pod/perltie.pod | 23 | ||||
-rw-r--r-- | pod/perlxs.pod | 7 | ||||
-rw-r--r-- | pod/perlxstut.pod | 10 |
6 files changed, 637 insertions, 40 deletions
diff --git a/pod/perlfunc.pod b/pod/perlfunc.pod index a89ee99e06..a1184c8a08 100644 --- a/pod/perlfunc.pod +++ b/pod/perlfunc.pod @@ -1580,6 +1580,7 @@ elements. That is, modifying an element of a list returned by grep actually modifies the element in the original list. See also L</map> for an array composed of the results of the BLOCK or EXPR. + =item hex EXPR =item hex diff --git a/pod/perlguts.pod b/pod/perlguts.pod index 20a11ac45c..1db8249d24 100644 --- a/pod/perlguts.pod +++ b/pod/perlguts.pod @@ -57,7 +57,9 @@ calculate the length by using C<sv_setpv> or by specifying 0 as the second argument to C<newSVpv>. Be warned, though, that Perl will determine the string's length by using C<strlen>, which depends on the string terminating with a NUL character. The arguments of C<sv_setpvf> are processed like -C<sprintf>, and the formatted output becomes the value. +C<sprintf>, and the formatted output becomes the value. The C<sv_set*()> +functions are not generic enough to operate on values that have "magic". +See L<Magic Virtual Tables> later in this document. All SVs that will contain strings should, but need not, be terminated with a NUL character. If it is not NUL-terminated there is a risk of @@ -130,7 +132,9 @@ using C<strlen>. In the second, you specify the length of the string yourself. The third function processes its arguments like C<sprintf> and appends the formatted output. The fourth function extends the string stored in the first SV with the string stored in the second SV. It also -forces the second SV to be interpreted as a string. +forces the second SV to be interpreted as a string. The C<sv_cat*()> +functions are not generic enough to operate on values that have "magic". +See L<Magic Virtual Tables> later in this document. If you know the name of a scalar variable, you can get a pointer to its SV by using the following: @@ -831,6 +835,17 @@ as the extension is sufficient. For '~' magic, it may also be appropriate to add an I32 'signature' at the top of the private data area and check that. +Also note that most of the C<sv_set*()> functions that modify scalars do +B<not> invoke 'set' magic on their targets. This must be done by the user +either by calling the C<SvSETMAGIC()> macro after calling these functions, +or by using one of the C<SvSetMagic*()> macros. Similarly, generic C code +must call the C<SvGETMAGIC()> macro to invoke any 'get' magic if they use +an SV obtained from external sources in functions that don't handle magic. +L<API LISTING> later in this document identifies such macros and functions. +For example, calls to the C<sv_cat*()> functions typically need to be +followed by C<SvSETMAGIC()>, but they don't need a prior C<SvGETMAGIC()> +since their implementation handles 'get' magic. + =head2 Finding Magic MAGIC* mg_find(SV*, int type); /* Finds the magic pointer of that type */ @@ -2324,28 +2339,29 @@ Opening bracket for arguments on a callback. See C<PUTBACK> and L<perlcall>. =item PUSHi Push an integer onto the stack. The stack must have room for this element. -See C<XPUSHi>. +Handles 'set' magic. See C<XPUSHi>. PUSHi(int d) =item PUSHn Push a double onto the stack. The stack must have room for this element. -See C<XPUSHn>. +Handles 'set' magic. See C<XPUSHn>. PUSHn(double d) =item PUSHp Push a string onto the stack. The stack must have room for this element. -The C<len> indicates the length of the string. See C<XPUSHp>. +The C<len> indicates the length of the string. Handles 'set' magic. See +C<XPUSHp>. PUSHp(char *c, int len ) =item PUSHs -Push an SV onto the stack. The stack must have room for this element. See -C<XPUSHs>. +Push an SV onto the stack. The stack must have room for this element. Does +not handle 'set' magic. See C<XPUSHs>. PUSHs(sv) @@ -2492,30 +2508,39 @@ of the SV is unaffected. SV* sv_bless _((SV* sv, HV* stash)); +=item SvCatMagicPV + +=item SvCatMagicPVN + +=item SvCatMagicSV + =item sv_catpv Concatenates the string onto the end of the string which is in the SV. +Handles 'get' magic, but not 'set' magic. See C<SvCatMagicPV>. void sv_catpv _((SV* sv, char* ptr)); =item sv_catpvn Concatenates the string onto the end of the string which is in the SV. The -C<len> indicates number of bytes to copy. +C<len> indicates number of bytes to copy. Handles 'get' magic, but not +'set' magic. See C<SvCatMagicPVN). void sv_catpvn _((SV* sv, char* ptr, STRLEN len)); =item sv_catpvf Processes its arguments like C<sprintf> and appends the formatted output -to an SV. +to an SV. Handles 'get' magic, but not 'set' magic. C<SvSETMAGIC()> must +typically be called after calling this function to handle 'set' magic. void sv_catpvf _((SV* sv, const char* pat, ...)); =item sv_catsv Concatenates the string from SV C<ssv> onto the end of the string in SV -C<dsv>. +C<dsv>. Handles 'get' magic, but not 'set' magic. See C<SvCatMagicSV). void sv_catsv _((SV* dsv, SV* ssv)); @@ -2559,6 +2584,13 @@ identical. I32 sv_eq _((SV* sv1, SV* sv2)); +=item SvGETMAGIC + +Invokes C<mg_get> on an SV if it has 'get' magic. This macro evaluates +its argument more than once. + + void SvGETMAGIC( SV *sv ) + =item SvGROW Expands the character buffer in the SV. Calls C<sv_grow> to perform the @@ -2776,7 +2808,7 @@ Checks the B<private> setting. Use C<SvPOK>. Returns a pointer to the string in the SV, or a stringified form of the SV if the SV does not contain a string. If C<len> is C<na> then Perl will -handle the length on its own. +handle the length on its own. Handles 'get' magic. char * SvPV (SV* sv, int len ) @@ -2828,6 +2860,13 @@ Dereferences an RV to return the SV. SV* SvRV (SV* sv); +=item SvSETMAGIC + +Invokes C<mg_set> on an SV if it has 'set' magic. This macro evaluates +its argument more than once. + + void SvSETMAGIC( SV *sv ) + =item SvTAINT Taints an SV if tainting is enabled @@ -2857,35 +2896,102 @@ Marks an SV as tainted. SvTAINTED_on (SV* sv); +=item SvSetMagicIV + +A macro that calls C<sv_setiv>, and invokes 'set' magic on the SV. +May evaluate arguments more than once. + + void SvSetMagicIV (SV* sv, IV num) + +=item SvSetMagicNV + +A macro that calls C<sv_setnv>, and invokes 'set' magic on the SV. +May evaluate arguments more than once. + + void SvSetMagicNV (SV* sv, double num) + +=item SvSetMagicPV + +A macro that calls C<sv_setpv>, and invokes 'set' magic on the SV. +May evaluate arguments more than once. + + void SvSetMagicPV (SV* sv, char *ptr) + +=item SvSetMagicPVIV + +A macro that calls C<sv_setpviv>, and invokes 'set' magic on the SV. +May evaluate arguments more than once. + + void SvSetMagicPVIV (SV* sv, IV num) + +=item SvSetMagicPVN + +A macro that calls C<sv_setpvn>, and invokes 'set' magic on the SV. +May evaluate arguments more than once. + + void SvSetMagicPVN (SV* sv, char* ptr, STRLEN len) + +=item SvSetMagicSV + +Same as C<SvSetSV>, but also invokes 'set' magic on the SV. +May evaluate arguments more than once. + + void SvSetMagicSV (SV* dsv, SV* ssv) + +=item SvSetMagicSV_nosteal + +Same as C<SvSetSV_nosteal>, but also invokes 'set' magic on the SV. +May evaluate arguments more than once. + + void SvSetMagicSV_nosteal (SV* dsv, SV* ssv) + +=item SvSetMagicUV + +A macro that calls C<sv_setuv>, and invokes 'set' magic on the SV. +May evaluate arguments more than once. + + void SvSetMagicUV (SV* sv, UV num) + =item sv_setiv -Copies an integer into the given SV. +Copies an integer into the given SV. Does not handle 'set' magic. +See C<SvSetMagicIV>. void sv_setiv _((SV* sv, IV num)); =item sv_setnv -Copies a double into the given SV. +Copies a double into the given SV. Does not handle 'set' magic. +See C<SvSetMagicNV>. void sv_setnv _((SV* sv, double num)); =item sv_setpv Copies a string into an SV. The string must be null-terminated. +Does not handle 'set' magic. See C<SvSetMagicPV>. void sv_setpv _((SV* sv, char* ptr)); +=item sv_setpviv + +Copies an integer into the given SV, also updating its string value. +Does not handle 'set' magic. See C<SvSetMagicPVIV>. + + void sv_setpviv _((SV* sv, IV num)); + =item sv_setpvn Copies a string into an SV. The C<len> parameter indicates the number of -bytes to be copied. +bytes to be copied. Does not handle 'set' magic. See C<SvSetMagicPVN>. void sv_setpvn _((SV* sv, char* ptr, STRLEN len)); =item sv_setpvf Processes its arguments like C<sprintf> and sets an SV to the formatted -output. +output. Does not handle 'set' magic. C<SvSETMAGIC()> must typically +be called after calling this function to handle 'set' magic. void sv_setpvf _((SV* sv, const char* pat, ...)); @@ -2938,13 +3044,36 @@ a reference count of 1. Note that C<sv_setref_pv> copies the pointer while this copies the string. +=item SvSetSV + +Calls C<sv_setsv> if dsv is not the same as ssv. May evaluate arguments +more than once. + + void SvSetSV (SV* dsv, SV* ssv) + +=item SvSetSV_nosteal + +Calls a non-destructive version of C<sv_setsv> if dsv is not the same as ssv. +May evaluate arguments more than once. + + void SvSetSV_nosteal (SV* dsv, SV* ssv) + =item sv_setsv Copies the contents of the source SV C<ssv> into the destination SV C<dsv>. -The source SV may be destroyed if it is mortal. +The source SV may be destroyed if it is mortal. Does not handle 'set' magic. +See the macro forms C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and +C<SvSetMagicSV_nosteal>. void sv_setsv _((SV* dsv, SV* ssv)); +=item sv_setuv + +Copies an unsigned integer into the given SV. Does not handle 'set' magic. +See C<SvSetMagicUV>. + + void sv_setuv _((SV* sv, UV num)); + =item SvSTASH Returns the stash of the SV. @@ -2982,7 +3111,7 @@ Double type flag for scalars. See C<svtype>. =item SvTRUE Returns a boolean indicating whether Perl would evaluate the SV as true or -false, defined or undefined. +false, defined or undefined. Does not handle 'get' magic. int SvTRUE (SV* sv) @@ -3020,6 +3149,8 @@ as a reversal of C<newSVrv>. See C<SvROK_off>. void sv_unref _((SV* sv)); +=item SvUseMagicPVN + =item sv_usepvn Tells an SV to use C<ptr> to find its string value. Normally the string is @@ -3027,7 +3158,8 @@ stored inside the SV but sv_usepvn allows the SV to use an outside string. The C<ptr> should point to memory that was allocated by C<malloc>. The string length, C<len>, must be supplied. This function will realloc the memory pointed to by C<ptr>, so that pointer should not be freed or used by -the programmer after giving it to sv_usepvn. +the programmer after giving it to sv_usepvn. Does not handle 'set' magic. +See C<SvUseMagicPVN>. void sv_usepvn _((SV* sv, char* ptr, STRLEN len)); @@ -3060,28 +3192,29 @@ function the same way you use the C C<printf> function. See C<croak()>. =item XPUSHi -Push an integer onto the stack, extending the stack if necessary. See -C<PUSHi>. +Push an integer onto the stack, extending the stack if necessary. Handles +'set' magic. See C<PUSHi>. XPUSHi(int d) =item XPUSHn -Push a double onto the stack, extending the stack if necessary. See -C<PUSHn>. +Push a double onto the stack, extending the stack if necessary. Handles 'set' +magic. See C<PUSHn>. XPUSHn(double d) =item XPUSHp Push a string onto the stack, extending the stack if necessary. The C<len> -indicates the length of the string. See C<PUSHp>. +indicates the length of the string. Handles 'set' magic. See C<PUSHp>. XPUSHp(char *c, int len) =item XPUSHs -Push an SV onto the stack, extending the stack if necessary. See C<PUSHs>. +Push an SV onto the stack, extending the stack if necessary. Does not +handle 'set' magic. See C<PUSHs>. XPUSHs(sv) @@ -3204,8 +3337,8 @@ Jeff Okamoto <F<okamoto@corp.hp.com>> With lots of help and suggestions from Dean Roehrich, Malcolm Beattie, Andreas Koenig, Paul Hudson, Ilya Zakharevich, Paul Marquess, Neil -Bowers, Matthew Green, Tim Bunce, Spider Boardman, Ulrich Pfeifer, and -Stephen McCamant. +Bowers, Matthew Green, Tim Bunce, Spider Boardman, Ulrich Pfeifer, +Stephen McCamant, and Gurusamy Sarathy. API Listing by Dean Roehrich <F<roehrich@cray.com>>. diff --git a/pod/perlhist.pod b/pod/perlhist.pod new file mode 100644 index 0000000000..9113ed90a4 --- /dev/null +++ b/pod/perlhist.pod @@ -0,0 +1,451 @@ +=pod + +=head1 NAME + +perlhist - the Perl history records + +=for RCS +# +# $Id: perlhist.pod,v 1.27 1998/01/16 19:50:20 jhi Exp $ +# +=end RCS + +=head1 DESCRIPTION + +This document aims to record the Perl source code releases. + +=head1 INTRODUCTION + +Perl history in brief, by Larry Wall: + + Perl 0 introduced Perl to my officemates. + Perl 1 introduced Perl to the world, and changed /\(...\|...\)/ to + /(...|...)/. \(Dan Faigin still hasn't forgiven me. :-\) + Perl 2 introduced Henry Spencer's regular expression package. + Perl 3 introduced the ability to handle binary data (embedded nulls). + Perl 4 introduced the first Camel book. Really. We mostly just + switched version numbers so the book could refer to 4.000. + Perl 5 introduced everything else, including the ability to + introduce everything else. + +=head1 THE KEEPERS OF THE PUMPKIN + +Larry Wall, Andy Dougherty, Tom Christiansen, Charles Bailey, Nick +Ing-Simmons, Chip Salzenberg, Tim Bunce, Malcolm Beattie. + +=head2 PUMPKIN? + +[from Porting/pumpkin.pod in the Perl source code distribution] + +Chip Salzenberg gets credit for that, with a nod to his cow orker, +David Croy. We had passed around various names (baton, token, hot +potato) but none caught on. Then, Chip asked: + +[begin quote] + + Who has the patch pumpkin? + +To explain: David Croy once told me once that at a previous job, +there was one tape drive and multiple systems that used it for backups. +But instead of some high-tech exclusion software, they used a low-tech +method to prevent multiple simultaneous backups: a stuffed pumpkin. +No one was allowed to make backups unless they had the "backup pumpkin". + +[end quote] + +The name has stuck. The holder of the pumpkin is sometimes called +the pumpking or the pumpkineer. + +=head1 THE RECORDS + + Pump- Release Date Notes + king (by no means + comprehensive, + see Changes* + for details) + =========================================================================== + + Larry 0 Classified. Don't ask. + + Larry 1.000 1987-Dec-18 + + 1.001..10 1988-Jan-30 + 1.011..14 1988-Feb-02 + + Larry 2.000 1988-Jun-05 + + 2.001 1988-Jun-28 + + Larry 3.000 1989-Oct-18 + + 3.001 1989-Oct-26 + 3.002..4 1989-Nov-11 + 3.005 1989-Nov-18 + 3.006..8 1989-Dec-22 + 3.009..13 1990-Mar-02 + 3.014 1990-Mar-13 + 3.015 1990-Mar-14 + 3.016..18 1990-Mar-28 + 3.019..27 1990-Aug-10 User subs. + 3.028 1990-Aug-14 + 3.029..36 1990-Oct-17 + 3.037 1990-Oct-20 + 3.040 1990-Nov-10 + 3.041 1990-Nov-13 + 3.042..43 1990-Jan-91 + 3.044 1991-Jan-12 + + Larry 4.000 1991-Mar-21 + + 4.001..3 1991-Apr-12 + 4.004..9 1991-Jun-07 + 4.010 1991-Jun-10 + 4.011..18 1991-Nov-05 + 4.019 1991-Nov-11 Stable. + 4.020..33 1992-Jun-08 + 4.034 1992-Jun-11 + 4.035 1992-Jun-23 + Larry 4.036 1993-Feb-05 Very stable. + + 5.000alpha1 1993-Jul-31 + 5.000alpha2 1993-Aug-16 + 5.000alpha3 1993-Oct-10 + 5.000alpha4 1993-???-?? + 5.000alpha5 1993-???-?? + 5.000alpha6 1993-Mar-18 + 5.003alpha7 1994-Mar-25 + Andy 5.000alpha8 1994-Apr-04 + Larry 5.000alpha9 1994-May-05 + 5.000alpha10 1994-???-?? + 5.000alpha11 1994-???-?? + Andy 5.000a11a 1994-Jul-07 To fit 14. + 5.000a11b 1994-Jul-14 + 5.000a11c 1994-Jul-19 + 5.000a11d 1994-Jul-22 + Larry 5.000alpha12 1994-???-?? + Andy 5.000a12a 1994-Aug-08 + 5.000a12b 1994-Aug-15 + 5.000a12c 1994-Aug-22 + 5.000a12d 1994-Aug-22 + 5.000a12e 1994-Aug-22 + 5.000a12f 1994-Aug-24 + 5.000a12g 1994-Aug-24 + 5.000a12h 1994-Aug-24 + Larry 5.000beta1 1994-???-?? + Andy 5.000b1a 1994-???-?? + Larry 5.000beta2 1994-Sep-14 Core slushified. + Andy 5.000b2a 1994-Sep-14 + 5.000b2b 1994-Sep-17 + 5.000b2c 1994-Sep-17 + Larry 5.000beta3 1994-???-?? + Andy 5.000b3a 1994-Sep-18 + 5.000b3b 1994-Sep-22 + 5.000b3c 1994-Sep-23 + 5.000b3d 1994-Sep-27 + 5.000b3e 1994-Sep-28 + 5.000b3f 1994-Sep-30 + 5.000b3g 1994-Oct-04 + Andy 5.000b3h 1994-Oct-07 + + Larry 5.000 1994-Oct-18 + + Andy 5.000a 1994-Dec-19 + 5.000b 1995-Jan-18 + 5.000c 1995-Jan-18 + 5.000d 1995-Jan-18 + 5.000e 1995-Jan-18 + 5.000f 1995-Jan-18 + 5.000g 1995-Jan-18 + 5.000h 1995-Jan-18 + 5.000i 1995-Jan-26 + 5.000j 1995-Feb-07 + 5.000k 1995-Feb-11 + 5.000l 1995-Feb-21 + 5.000m 1995-???-?? + 5.000n 1995-Mar-07 + + Larry 5.001 1995-Mar-13 + + Andy 5.001a 1995-Mar-15 + 5.001b 1995-Mar-31 + 5.001c 1995-Apr-07 + 5.001d 1995-Apr-14 + 5.001e 1995-Apr-18 Stable. + 5.001f 1995-May-31 + 5.001g 1995-May-25 + 5.001h 1995-May-25 + 5.001i 1995-May-30 + 5.001j 1995-Jun-05 + 5.001k 1995-Jun-06 + 5.001l 1995-Jun-06 Stable. + 5.001m 1995-Jul-02 Very stable. + 5.001n 1995-Oct-31 Very unstable. + 5.002beta1 1995-Nov-21 + 5.002b1a 1995-Nov-?? + 5.002b1b 1995-Dec-04 + 5.002b1c 1995-Dec-04 + 5.002b1d 1995-Dec-04 + 5.002b1e 1995-Dec-08 + 5.002b1f 1995-Dec-08 + Tom 5.002b1g 1995-Dec-21 Doc release. + Andy 5.002b1h 1996-Jan-05 + 5.002b2 1996-Jan-14 + Larry 5.002b3 1996-Feb-02 + Andy 5.002gamma 1996-Feb-11 + Larry 5.002delta 1996-Feb-27 + + Larry 5.002 1996-Feb-29 + + Charles 5.002_01 1996-Mar-25 + + 5.003 1996-Jun-25 Security release. + + 5.003_01 1996-Jul-31 + Nick 5.003_02 1996-Aug-10 + Andy 5.003_03 1996-Aug-28 + 5.003_04 1996-Sep-02 + 5.003_05 1996-Sep-12 + 5.003_06 1996-Oct-07 + 5.003_07 1996-Oct-10 + Chip 5.003_08 1996-Nov-19 + 5.003_09 1996-Nov-26 + 5.003_10 1996-Nov-29 + 5.003_11 1996-Dec-06 + 5.003_12 1996-Dec-19 + 5.003_13 1996-Dec-20 + 5.003_14 1996-Dec-23 + 5.003_15 1996-Dec-23 + 5.003_16 1996-Dec-24 + 5.003_17 1996-Dec-27 + 5.003_18 1996-Dec-31 + 5.003_19 1997-Jan-04 + 5.003_20 1997-Jan-07 + 5.003_21 1997-Jan-15 + 5.003_22 1997-Jan-16 + 5.003_23 1997-Jan-25 + 5.003_24 1997-Jan-29 + 5.003_25 1997-Feb-04 + 5.003_26 1997-Feb-10 + 5.003_27 1997-Feb-18 + 5.003_28 1997-Feb-21 + 5.003_90 1997-Feb-25 Ramping up to the 5.004 release. + 5.003_91 1997-Mar-01 + 5.003_92 1997-Mar-06 + 5.003_93 1997-Mar-10 + 5.003_94 1997-Mar-22 + 5.003_95 1997-Mar-25 + 5.003_96 1997-Apr-01 + 5.003_97 1997-Apr-03 Fairly widely used. + 5.003_97a 1997-Apr-05 + 5.003_97b 1997-Apr-08 + 5.003_97c 1997-Apr-10 + 5.003_97d 1997-Apr-13 + 5.003_97e 1997-Apr-15 + 5.003_97f 1997-Apr-17 + 5.003_97g 1997-Apr-18 + 5.003_97h 1997-Apr-24 + 5.003_97i 1997-Apr-25 + 5.003_97j 1997-Apr-28 + 5.003_98 1997-Apr-30 + 5.003_99 1997-May-01 + 5.003_99a 1997-May-09 + p54rc1 1997-May-12 Release Candidates. + p54rc2 1997-May-14 + + Chip 5.004 1997-May-15 A major maintenance release. + + Tim 5.004_01 1997-Jun-13 The 5.004 maintenance track. + 5.004_02 1997-Aug-07 + 5.004_03 1997-Sep-05 + 5.004_04 1997-Oct-15 + + Malcolm 5.004_50 1997-Sep-09 The 5.005 development track. + 5.004_51 1997-Oct-02 + 5.004_52 1997-Oct-15 + 5.004_53 1997-Oct-16 + 5.004_54 1997-Nov-14 + 5.004_55 1997-Nov-25 + 5.004_56 1997-Dec-18 + +=head2 SELECTED RELEASE SIZES + +For example the notation "core: 212 29" in the release 1.000 means that +it had in the core 212 kilobytes, in 29 files. The "core".."doc" are +explained below. + + release core lib ext t doc + ====================================================================== + + 1.000 212 29 - - - - 38 51 62 3 + 1.014 219 29 - - - - 39 52 68 4 + 2.000 309 31 2 3 - - 55 57 92 4 + 2.001 312 31 2 3 - - 55 57 94 4 + 3.000 508 36 24 11 - - 79 73 156 5 + 3.044 645 37 61 20 - - 90 74 190 6 + 4.000 635 37 59 20 - - 91 75 198 4 + 4.019 680 37 85 29 - - 98 76 199 4 + 4.036 709 37 89 30 - - 98 76 208 5 + 5.000alpha2 785 50 114 32 - - 112 86 209 5 + 5.000a3 801 50 117 33 - - 121 87 209 5 + 5.000a9 1022 56 149 43 116 29 125 90 217 6 + 5.000a12h 978 49 140 49 205 46 152 97 228 9 + 5.000beta3h 1035 53 232 70 216 38 162 94 218 21 + 5.000 1038 53 250 76 216 38 154 92 536 62 + 5.001m 1071 54 388 82 240 38 159 95 544 29 + 5.002 1121 54 661 101 287 43 155 94 847 35 + 5.003 1129 54 680 102 291 43 166 100 853 35 + 5.003_07 1231 60 748 106 396 53 213 137 976 39 + 5.004 1351 60 1230 136 408 51 355 161 1587 55 + 5.004_01 1356 60 1258 138 410 51 358 161 1587 55 + 5.004_04 1375 60 1294 139 413 51 394 162 1629 55 + 5.004_51 1401 61 1260 140 413 53 358 162 1594 56 + 5.004_53 1422 62 1295 141 438 70 394 162 1637 56 + 5.004_56 1501 66 1301 140 447 74 408 165 1648 57 + +The "core"..."doc" mean the following files from the Perl source code +distribution. The glob notation ** means recursively, (.) means +regular files. + + core *.[hcy] + lib lib/**/*.p[ml] + ext ext/**/*.{[hcyt],xs,pm} + t t/**/*(.) + doc {README*,INSTALL,*[_.]man{,.?},pod/**/*.pod} + +Here are some statistics for the other subdirectories and one file in +the Perl source distribution for somewhat more selected releases. + + ====================================================================== + Legend: kB # + + 1.014 2.001 3.044 4.000 4.019 4.036 + + atarist - - - - - - - - - - 113 31 + Configure 31 1 37 1 62 1 73 1 83 1 86 1 + eg - - 34 28 47 39 47 39 47 39 47 39 + emacs - - - - - - 67 4 67 4 67 4 + h2pl - - - - 12 12 12 12 12 12 12 12 + hints - - - - - - - - 5 42 11 56 + msdos - - - - 41 13 57 15 58 15 60 15 + os2 - - - - 63 22 81 29 81 29 113 31 + usub - - - - 21 16 25 7 43 8 43 8 + x2p 103 17 104 17 137 17 147 18 152 19 154 19 + + ====================================================================== + + 5.000a2 5.000a12h 5.000b3h 5.000 5.001m 5.002 5.003 + + atarist 113 31 113 31 - - - - - - - - - - + bench - - 0 1 - - - - - - - - - - + Bugs 2 5 26 1 - - - - - - - - - - + dlperl 40 5 - - - - - - - - - - - - + do 127 71 - - - - - - - - - - - - + Configure - - 153 1 159 1 160 1 180 1 201 1 201 1 + Doc - - 26 1 75 7 11 1 11 1 - - - - + eg 79 58 53 44 51 43 54 44 54 44 54 44 54 44 + emacs 67 4 104 6 104 6 104 1 104 6 108 1 108 1 + h2pl 12 12 12 12 12 12 12 12 12 12 12 12 12 12 + hints 11 56 12 46 18 48 18 48 44 56 73 59 77 60 + msdos 60 15 60 15 - - - - - - - - - - + os2 113 31 113 31 - - - - - - 84 17 56 10 + U - - 62 8 112 42 - - - - - - - - + usub 43 8 - - - - - - - - - - - - + utils - - - - - - - - - - 87 7 88 7 + vms - - 80 7 123 9 184 15 304 20 500 24 475 26 + x2p 171 22 171 21 162 20 162 20 279 20 280 20 280 20 + + ====================================================================== + + 5.003_07 5.004 5.004_04 5.004_56 + + Configure 217 1 225 1 225 1 232 1 + cygwin32 - - 23 5 23 5 23 5 + djgpp - - - - - - 15 5 + eg 54 44 81 62 81 62 81 62 + emacs 143 1 194 1 204 1 212 2 + h2pl 12 12 12 12 12 12 12 12 + hints 90 62 129 69 132 71 138 72 + os2 117 42 121 42 127 42 134 44 + plan9 79 15 82 15 82 15 82 15 + Porting 51 1 94 2 109 4 109 4 + qnx - - 1 2 1 2 1 2 + utils 97 7 112 8 118 8 118 8 + vms 505 27 518 34 524 34 538 34 + win32 - - 285 33 378 36 449 38 + x2p 280 19 281 19 281 19 281 19 + +=head2 SELECTED PATCH SIZES + +The "diff lines kb" means that for example the patch 5.003_08, +to be applied on top 5.003_07 (or whatever was before it) added +lines for 110 kilobytes, it removed lines for 19 kilobytes, and +changed lines for 424 kilobytes. Just the lines themselves are +counted, not their context. The "+ - !" become from the diff(1)s +context diff output format. + + Pump- Release Date diff lines kB + king + - ! + =========================================================================== + + Chip 5.003_08 1996-Nov-19 110 19 424 + 5.003_09 1996-Nov-26 38 9 248 + 5.003_10 1996-Nov-29 29 2 27 + 5.003_11 1996-Dec-06 73 12 165 + 5.003_12 1996-Dec-19 275 6 436 + 5.003_13 1996-Dec-20 95 1 56 + 5.003_14 1996-Dec-23 23 7 333 + 5.003_15 1996-Dec-23 0 0 1 + 5.003_16 1996-Dec-24 12 3 50 + 5.003_17 1996-Dec-27 19 1 14 + 5.003_18 1996-Dec-31 21 1 32 + 5.003_19 1997-Jan-04 80 3 85 + 5.003_20 1997-Jan-07 18 1 146 + 5.003_21 1997-Jan-15 38 10 221 + 5.003_22 1997-Jan-16 4 0 18 + 5.003_23 1997-Jan-25 71 15 119 + 5.003_24 1997-Jan-29 426 1 20 + 5.003_25 1997-Feb-04 21 8 169 + 5.003_26 1997-Feb-10 16 1 15 + 5.003_27 1997-Feb-18 32 10 38 + 5.003_28 1997-Feb-21 58 4 66 + 5.003_90 1997-Feb-25 22 2 34 + 5.003_91 1997-Mar-01 37 1 39 + 5.003_92 1997-Mar-06 16 3 69 + 5.003_93 1997-Mar-10 12 3 15 + 5.003_94 1997-Mar-22 407 7 200 + 5.003_95 1997-Mar-25 41 1 37 + 5.003_96 1997-Apr-01 283 5 261 + 5.003_97 1997-Apr-03 13 2 34 + 5.003_97a 1997-Apr-05 57 1 27 + 5.003_97b 1997-Apr-08 14 1 20 + 5.003_97c 1997-Apr-10 20 1 16 + 5.003_97d 1997-Apr-13 8 0 16 + 5.003_97e 1997-Apr-15 15 4 46 + 5.003_97f 1997-Apr-17 7 1 33 + 5.003_97g 1997-Apr-18 6 1 42 + 5.003_97h 1997-Apr-24 23 3 68 + 5.003_97i 1997-Apr-25 23 1 31 + 5.003_97j 1997-Apr-28 36 1 49 + 5.003_98 1997-Apr-30 171 12 539 + 5.003_99 1997-May-01 6 0 7 + 5.003_99a 1997-May-09 36 2 61 + p54rc1 1997-May-12 8 1 11 + p54rc2 1997-May-14 6 0 40 + + 5.004 1997-May-15 4 0 4 + + Tim 5.004_01 1997-Jun-13 222 14 57 + 5.004_02 1997-Aug-07 112 16 119 + 5.004_03 1997-Sep-05 109 0 17 + 5.004_04 1997-Oct-15 66 8 173 + +=head1 THE KEEPERS OF THE RECORDS + +Jarkko Hietaniemi <F<jhi@iki.fi>>. + +Thanks to the collective memory of the Perlfolk. In addition to the +Keepers of the Pumpkin also Alan Champion, Andreas König, John +Macdonald, Matthias Neeracher, Michael Peppler, Randal Schwartz, and +Paul D. Smith sent corrections and additions. + +=cut diff --git a/pod/perltie.pod b/pod/perltie.pod index c6eb7156ce..79a749e68a 100644 --- a/pod/perltie.pod +++ b/pod/perltie.pod @@ -180,17 +180,26 @@ TIESCALAR classes are certainly possible. =head2 Tying Arrays A class implementing a tied ordinary array should define the following -methods: TIEARRAY, FETCH, STORE, and perhaps DESTROY. +methods: TIEARRAY, FETCH, STORE, FETCHSIZE, STORESIZE and perhaps DESTROY. -B<WARNING>: Tied arrays are I<incomplete>. They are also distinctly lacking -something for the C<$#ARRAY> access (which is hard, as it's an lvalue), as -well as the other obvious array functions, like push(), pop(), shift(), -unshift(), and splice(). +FETCHSIZE and STORESIZE are used to provide C<$#array> and +equivalent C<scalar(@array)> access. + +The methods POP, PUSH, SHIFT, UNSHIFT, SPLICE are required if the perl +operator with the corresponding (but lowercase) name is to operate on the +tied array. The B<Tie::Array> class can be used as a base class to implement +these in terms of the basic five methods above. + +In addition EXTEND will be called when perl would have pre-extended +allocation in a real array. + +This means that tied arrays are now I<complete>. The example below needs +upgrading to illustrate this. (The documentation in B<Tie::Array> is more +complete.) For this discussion, we'll implement an array whose indices are fixed at its creation. If you try to access anything beyond those bounds, you'll -take an exception. (Well, if you access an individual element; an -aggregate assignment would be missed.) For example: +take an exception. For example: require Bounded_Array; tie @ary, 'Bounded_Array', 2; diff --git a/pod/perlxs.pod b/pod/perlxs.pod index 6629af2dd5..d257b196eb 100644 --- a/pod/perlxs.pod +++ b/pod/perlxs.pod @@ -268,14 +268,17 @@ be seen by Perl. The OUTPUT: keyword will also allow an output parameter to be mapped to a matching piece of code rather than to a -typemap. +typemap. The following duplicates the behavior of the +typemap: bool_t rpcb_gettime(host,timep) char *host time_t &timep OUTPUT: - timep sv_setnv(ST(1), (double)timep); + timep SvSetMagicNV(ST(1), (double)timep); + +See L<perlguts> for details about C<SvSetMagicNV()>. =head2 The CODE: Keyword diff --git a/pod/perlxstut.pod b/pod/perlxstut.pod index 9ebfe82a97..dfc56ffbf1 100644 --- a/pod/perlxstut.pod +++ b/pod/perlxstut.pod @@ -428,7 +428,7 @@ Let's now take a look at a portion of the .c file created for our extension. } else { arg = 0.0; } - sv_setnv(ST(0), (double)arg); /* XXXXX */ + SvSetMagicNV(ST(0), (double)arg); /* XXXXX */ } XSRETURN(1); } @@ -438,10 +438,10 @@ the typemap file, you'll see that doubles are of type T_DOUBLE. In the INPUT section, an argument that is T_DOUBLE is assigned to the variable arg by calling the routine SvNV on something, then casting it to double, then assigned to the variable arg. Similarly, in the OUTPUT section, -once arg has its final value, it is passed to the sv_setnv function to -be passed back to the calling subroutine. These two functions are explained -in L<perlguts>; we'll talk more later about what that "ST(0)" means in the -section on the argument stack. +once arg has its final value, it is passed to the SvSetMagicNV() macro +(which calls the sv_setnv() function) to be passed back to the calling +subroutine. These macros/functions are explained in L<perlguts>; we'll talk +more later about what that "ST(0)" means in the section on the argument stack. =head2 WARNING |