diff options
-rw-r--r-- | Changes | 55 | ||||
-rw-r--r-- | README.win32 | 62 | ||||
-rw-r--r-- | patchlevel.h | 1 | ||||
-rw-r--r-- | pod/perlcall.pod | 18 | ||||
-rw-r--r-- | pod/perldelta.pod | 233 | ||||
-rw-r--r-- | pod/perlembed.pod | 36 | ||||
-rw-r--r-- | pod/perlguts.pod | 78 | ||||
-rw-r--r-- | pod/perltoc.pod | 56 | ||||
-rw-r--r-- | pod/perlxs.pod | 10 |
9 files changed, 408 insertions, 141 deletions
@@ -78,6 +78,61 @@ Version 5.005 Production release ------------- ____________________________________________________________________________ +[ 1645] By: gsar on 1998/07/22 19:37:41 + Log: don't use qualify() in class methods + From: Albert Dvornik <bert@genscan.com> + Date: 22 Jul 1998 15:14:46 EDT + Message-Id: <tqbtqhlmu1.fsf_-_@puma.genscan.com> + Subject: [PATCH 5.005-MAYBE] Bug in IO::Handle->input_record_separator + Branch: perl + ! ext/IO/lib/IO/Handle.pm +____________________________________________________________________________ +[ 1644] By: gsar on 1998/07/22 18:13:31 + Log: newer perlembed.pod + Branch: perl + ! pod/perlembed.pod +____________________________________________________________________________ +[ 1643] By: gsar on 1998/07/22 18:03:42 + Log: From: Andy Dougherty <doughera@lafcol.lafayette.edu> + Date: Wed, 22 Jul 1998 13:42:20 EDT + Message-Id: <Pine.SUN.3.96.980722134049.10073C-100000@newton.phys> + Subject: Re: 5.005 - a sneak preview + Branch: perl + ! Porting/pumpkin.pod +____________________________________________________________________________ +[ 1642] By: gsar on 1998/07/22 17:58:42 + Log: add perlmodinstall, regen perltoc + Branch: perl + + pod/perlmodinstall.pod + ! MANIFEST pod/Makefile pod/buildtoc pod/perl.pod + ! pod/perltoc.pod win32/pod.mak +____________________________________________________________________________ +[ 1641] By: gsar on 1998/07/22 17:11:55 + Log: support optional crypt() with PERL_OBJECT + From: "Douglas Lankshear" <dougl@ActiveState.com> + Date: Wed, 22 Jul 1998 08:21:10 PDT + Message-Id: <000701bdb584$5b57c070$a32fa8c0@tau.Active> + Subject: [PATCH 5.005 maybe] for crypt with PERL_OBJECT + Branch: perl + ! iperlsys.h pp.c win32/Makefile win32/makefile.mk + ! win32/perlhost.h win32/win32.c win32/win32iop.h +____________________________________________________________________________ +[ 1640] By: gsar on 1998/07/22 17:09:11 + Log: win32 tweaks + Date: Wed, 22 Jul 1998 07:09:09 PDT + Message-Id: <000001bdb57a$4bc9dd00$a32fa8c0@tau.Active> + From: "Douglas Lankshear" <dougl@ActiveState.com> + Branch: perl + ! win32/Makefile win32/makefile.mk win32/win32.h +____________________________________________________________________________ +[ 1639] By: gsar on 1998/07/22 17:00:30 + Log: From: d-lewart@uiuc.edu (Daniel S. Lewart) + Date: Wed, 22 Jul 1998 06:20:08 CDT + Message-Id: <199807221120.GAA07962@staff2.cso.uiuc.edu> + Subject: [PATCH] lib/Sys/Syslog.pm doc + Branch: perl + ! Changes lib/Sys/Syslog.pm +____________________________________________________________________________ [ 1638] By: gsar on 1998/07/22 09:12:26 Log: up patchlevel etc (only doc patching from now on, testing in progress) Branch: perl diff --git a/README.win32 b/README.win32 index 3ba6d2e323..6d9b01500f 100644 --- a/README.win32 +++ b/README.win32 @@ -147,12 +147,17 @@ ActiveState Tool Corp.) PERL_OBJECT uses C++, and the binaries are therefore incompatible with the regular C build. However, the PERL_OBJECT build does provide something called the C-API, for linking it with extensions that won't compile under PERL_OBJECT. PERL_OBJECT -cannot be enabled when using GCC or EGCS, yet. +is not yet supported under GCC or EGCS. WARNING: Binaries built with +PERL_OBJECT enabled are B<not> compatible with binaries built without. +Perl installs PERL_OBJECT binaries under a distinct architecture name, +so they B<can> coexist, though. Beginning with version 5.005, there is experimental support for building a perl interpreter that is capable of native threading. Binaries built with thread support enabled are also incompatible with the vanilla C -build. +build. WARNING: Binaries built with threads enabled are B<not> compatible +with binaries built without. Perl installs threads enabled binaries under +a distinct architecture name, so they B<can> coexist, though. At the present time, you cannot enable both threading and PERL_OBJECT. You can get only one of them in a Perl interpreter. @@ -382,6 +387,59 @@ it looks like the extension building support is at fault, report that with full details of how the build failed using the perlbug utility. +=item Command-line Wildcard Expansion + +The default command shells on DOS descendant operating systems (such +as they are) usually do not expand wildcard arguments supplied to +programs. They consider it the application's job to handle that. +This is commonly achieved by linking the application (in our case, +perl) with startup code that the C runtime libraries usually provide. +However, doing that results in incompatible perl versions (since the +behavior of the argv expansion code differs depending on the +compiler, and it is even buggy on some compilers). Besides, it may +be a source of frustration if you use such a perl binary with an +alternate shell that *does* expand wildcards. + +Instead, the following solution works rather well. The nice things +about it: 1) you can start using it right away 2) it is more powerful, +because it will do the right thing with a pattern like */*/*.c +3) you can decide whether you do/don't want to use it 4) you can +extend the method to add any customizations (or even entirely +different kinds of wildcard expansion). + + C:\> copy con c:\perl\lib\Wild.pm + # Wild.pm - emulate shell @ARGV expansion on shells that don't + use File::DosGlob; + @ARGV = map { + my @g = File::DosGlob::glob($_) if /[*?]/; + @g ? @g : $_; + } @ARGV; + 1; + ^Z + C:\> set PERL5OPT=-MWild + C:\> perl -le "for (@ARGV) { print }" */*/perl*.c + p4view/perl/perl.c + p4view/perl/perlio.c + p4view/perl/perly.c + perl5.005/win32/perlglob.c + perl5.005/win32/perllib.c + perl5.005/win32/perlglob.c + perl5.005/win32/perllib.c + perl5.005/win32/perlglob.c + perl5.005/win32/perllib.c + +Note there are two distinct steps there: 1) You'll have to create +Wild.pm and put it in your perl lib directory. 2) You'll need to +set the PERL5OPT environment variable. If you want argv expansion +to be the default, just set PERL5OPT in your default startup +environment. + +If you are using the Visual C compiler, you can get the C runtime's +command line wildcard expansion built into perl binary. The resulting +binary will always expand unquoted command lines, which may not be +what you want if you use a shell that does that for you. The expansion +done is also somewhat less powerful than the approach suggested above. + =item Win32 Specific Extensions A number of extensions specific to the Win32 platform are available diff --git a/patchlevel.h b/patchlevel.h index 21d19a8987..0f4e051246 100644 --- a/patchlevel.h +++ b/patchlevel.h @@ -39,7 +39,6 @@ */ static char *local_patches[] = { NULL - ,"MAYBE - 5.005, but not just yet" ,NULL }; diff --git a/pod/perlcall.pod b/pod/perlcall.pod index ac60007878..7c94d377c7 100644 --- a/pod/perlcall.pod +++ b/pod/perlcall.pod @@ -969,9 +969,9 @@ and some C to call it SPAGAIN ; /* Check the eval first */ - if (SvTRUE(GvSV(errgv))) + if (SvTRUE(ERRSV)) { - printf ("Uh oh - %s\n", SvPV(GvSV(errgv), na)) ; + printf ("Uh oh - %s\n", SvPV(ERRSV, PL_na)) ; POPs ; } else @@ -1011,9 +1011,9 @@ I<Subtract>. The code - if (SvTRUE(GvSV(errgv))) + if (SvTRUE(ERRSV)) { - printf ("Uh oh - %s\n", SvPV(GvSV(errgv), na)) ; + printf ("Uh oh - %s\n", SvPV(ERRSV, PL_na)) ; POPs ; } @@ -1021,14 +1021,14 @@ is the direct equivalent of this bit of Perl print "Uh oh - $@\n" if $@ ; -C<errgv> is a perl global of type C<GV *> that points to the -symbol table entry containing the error. C<GvSV(errgv)> therefore +C<PL_errgv> is a perl global of type C<GV *> that points to the +symbol table entry containing the error. C<ERRSV> therefore refers to the C equivalent of C<$@>. =item 3. Note that the stack is popped using C<POPs> in the block where -C<SvTRUE(GvSV(errgv))> is true. This is necessary because whenever a +C<SvTRUE(ERRSV)> is true. This is necessary because whenever a I<perl_call_*> function invoked with G_EVAL|G_SCALAR returns an error, the top of the stack holds the value I<undef>. Because we want the program to continue after detecting this error, it is essential that @@ -1877,7 +1877,7 @@ of values> recoded to use C<ST> instead of C<POP*>. SPAGAIN ; SP -= count ; - ax = (SP - stack_base) + 1 ; + ax = (SP - PL_stack_base) + 1 ; if (count != 2) croak("Big trouble\n") ; @@ -1907,7 +1907,7 @@ The code SPAGAIN ; SP -= count ; - ax = (SP - stack_base) + 1 ; + ax = (SP - PL_stack_base) + 1 ; sets the stack up so that we can use the C<ST> macro. diff --git a/pod/perldelta.pod b/pod/perldelta.pod index 0cbba50374..7a371fb586 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -6,11 +6,19 @@ perldelta - what's new for perl5.005 This document describes differences between the 5.004 release and this one. -[XXX this needs more verbose summaries of the sub topics, instead of just -the "See foo." Scheduled for a second iteration. GSAR] - =head1 About the new versioning system +Perl is now developed on two tracks: a maintenance track that makes +small, safe updates to released production versions with emphasis on +compatibility; and a development track that pursues more aggressive +evolution. Maintenance releases (which should be considered production +quality) have subversion numbers that run from C<1> to C<49>, and +development releases (which should be considered "alpha" quality) run +from C<50> to C<99>. + +Perl 5.005 is the combined product of the new dual-track development +scheme. + =head1 Incompatible Changes =head2 WARNING: This version is not binary compatible with Perl 5.004. @@ -31,31 +39,80 @@ discussion of the changes in order to adapt them to your system. =head2 Perl Source Compatibility When none of the experimental features are enabled, there should be -no user-visible Perl source compatibility issue. +very few user-visible Perl source compatibility issues. If threads are enabled, then some caveats apply. C<@_> and C<$_> become lexical variables. The effect of this should be largely transparent to the user, but there are some boundary conditions under which user will -need to be aware of the issues. [XXX Add e.g. here.] +need to be aware of the issues. For example, C<local(@_)> results in +a "Can't localize lexical variable @_ ..." message. This may be enabled +in a future version. Some new keywords have been introduced. These are generally expected to -have very little impact on compatibility. See L</New C<INIT> keyword>, -L</New C<lock> keyword>, and L</New C<qr//> operator>. +have very little impact on compatibility. See L<New C<INIT> keyword>, +L<New C<lock> keyword>, and L<New C<qr//> operator>. Certain barewords are now reserved. Use of these will provoke a warning if you have asked for them with the C<-w> switch. -See L</C<our> is now a reserved word>. +See L<C<our> is now a reserved word>. =head2 C Source Compatibility +There have been a large number of changes in the internals to support +the new features in this release. + +=over 4 + =item Core sources now require ANSI C compiler +An ANSI C compiler is now B<required> to build perl. See F<INSTALL>. + +=item All Perl global variables must now be referenced with an explicit prefix + +All Perl global variables that are visible for use by extensions now +have a C<PL_> prefix. New extensions should C<not> refer to perl globals +by their unqualified names. To preserve sanity, we provide limited +backward compatibility for globals that are being widely used like +C<sv_undef> and C<na> (which should now be written as C<PL_sv_undef>, +C<PL_na> etc.) + +If you find that your XS extension does not compile anymore because a +perl global is not visible, try adding a C<PL_> prefix to the global +and rebuild. + +It is strongly recommended that all functions in the Perl API that don't +begin with C<perl> be referenced with a C<Perl_> prefix. The bare function +names without the C<Perl_> prefix are supported with macros, but this +support may cease in a future release. + +See L<perlguts/API LISTING>. + =item Enabling threads has source compatibility issues +Perl built with threading enabled requires extensions to use the new +C<dTHR> macro to initialize the handle to access per-thread data. +If you see a compiler error that talks about the variable C<thr> not +being declared (when building a module that has XS code), you need +to add C<dTHR;> at the beginning of the block that elicited the error. + +The API function C<perl_get_sv("@",FALSE)> should be used instead of +directly accessing perl globals as C<GvSV(errgv)>. The API call is +backward compatible with existing perls and provides source compatibility +with threading is enabled. + +See L<API Changes for more information>. + +=back + =head2 Binary Compatibility This version is NOT binary compatible with older versions. All extensions -will need to be recompiled. +will need to be recompiled. Further binaries built with threads enabled +are incompatible with binaries built without. This should largely be +transparent to the user, as all binary incompatible configurations have +their own unique architecture name, and extension binaries get installed at +unique locations. This allows coexistence of several configurations in +the same directory hierarchy. See F<INSTALL>. =head2 Security fixes may affect compatibility @@ -78,24 +135,25 @@ features make them less often a problem. See L<New Diagnostics>. Perl has a new Social Contract for contributors. See F<Porting/Contract>. The license included in much of the Perl documentation has changed. -[XXX See where?] +See L<perl> and the individual perl man pages listed therein. =head1 Core Changes =head2 Threads -WARNING: Threading is considered an experimental feature. Details of the +WARNING: Threading is considered an B<experimental> feature. Details of the implementation may change without notice. There are known limitations -and and some bugs. +and some bugs. These are expected to be fixed in future versions. See L<README.threads>. =head2 Compiler -WARNING: The Compiler and related tools are considered experimental. +WARNING: The Compiler and related tools are considered B<experimental>. Features may change without notice, and there are known limitations -and bugs. +and bugs. Since the compiler is fully external to perl, the default +configuration will build and install it. The Compiler produces three different types of transformations of a perl program. The C backend generates C code that captures perl's state @@ -125,10 +183,87 @@ at a glance. C<perlcc> is a simple frontend for compiling perl. -See C<ext/B/README>. +See C<ext/B/README>, L<B>, and the respective compiler modules. =head2 Regular Expressions +Perl's regular expression engine has been seriously overhauled, and +many new constructs are supported. Several bugs have been fixed. + +Here is an itemized summary: + +=over 4 + +=item Many new and improved optimizations + +Changes in the RE engine: + + Unneeded nodes removed; + Substrings merged together; + New types of nodes to process (SUBEXPR)* and similar expressions + quickly, used if the SUBEXPR has no side effects and matches + strings of the same length; + better optimizations by lookup for constant substrings; + Better search for constants substrings anchored by $ ; + +Changes in Perl code using RE engine: + + more optimizations to s/longer/short/; + study() was not working; + /blah/ may be optimized to an analogue of index() if $& $` $' not seen; + Unneeded copying of matched-against string removed; + Only matched part of the string is copying if $` $' were not seen; + +=item Many bug fixes + +Note that only the major bug fixes are listed here. See F<Changes> for others. + + Backtracking might not restore start of $3. + No feedback if max count for * or + on "complex" subexpression + was reached, similarly (but at compile time) for {3,34567} + Primitive restrictions on max count introduced to decrease a + possibility of a segfault; + (ZERO-LENGTH)* could segfault; + (ZERO-LENGTH)* was prohibited; + Long RE were not allowed; + /RE/g could skip matches at the same position after a + zero-length match; + +=item New regular expression constructs + +The following new syntax elements are supported: + + (?<=RE) + (?<!RE) + (?{ CODE }) + (?i-x) + (?i:RE) + (?(COND)YES_RE|NO_RE) + (?>RE) + \z + +=item New operator for precompiled regular expressions + +See L<New C<qr//> operator>. + +=item Other improvements + + better debugging output (possibly with colors), even from non-debugging Perl; + RE engine code now looks like C, not like assembler; + behaviour of RE modifiable by `use re' directive; + Improved documentation; + Test suite significantly extended; + Syntax [:^upper:] etc., reserved inside character classes; + +=item Incompatible changes + + (?i) localized inside enclosing group; + $( is not interpolated into RE any more; + /RE/g may match at the same position (with non-zero length) + after a zero-length match (bug fix). + +=back + See L<perlre> and L<perlop>. =head2 Improved malloc() @@ -137,15 +272,24 @@ See banner at the beginning of C<malloc.c> for details. =head2 Quicksort is internally implemented +Perl now contains its own highly optimized qsort() routine. The new qsort() +is resistant to inconsistent comparison functions, so Perl's C<sort()> will +not provoke coredumps any more when given poorly written sort subroutines. +(Some C library C<qsort()>s that were being used before used to have this +problem.) In our testing, the new C<qsort()> required the minimal number +of pair-wise compares on average, among all known C<qsort()> implementations. + See C<perlfunc/sort>. =head2 Reliable signals -Two kinds. +Perl's signal handling is susceptible to random crashes, because signals +arrive asynchronously, and the Perl runtime is not reentrant at arbitrary +times. -Via C<Thread::Signal>. - -Via switched runtime op loop. [XXX Not yet available.] +However, one experimental implementation of reliable signals is available +when threads are enabled. See C<Thread::Signal>. Also see F<INSTALL> for +how to build a Perl capable of threads. =head2 Reliable stack pointers @@ -186,11 +330,18 @@ not try to allocate a 1000000-size list anymore. =head2 C<Foo::> can be used as implicitly quoted package name -[XXX See what?] +Barewords caused unintuitive behavior when a subroutine with the same +name as a package happened to be defined. Thus, C<new Foo @args>, +use the result of the call to C<Foo()> instead of C<Foo> being treated +as a literal. The recommended way to write barewords in the indirect +object slot is C<new Foo:: @args>. Note that the method C<new()> is +called with a first argument of C<Foo>, not C<Foo::> when you do that. =head2 C<exists $Foo::{Bar::}> tests existence of a package -[XXX See what?] +It was impossible to test for the existence of a package without +actually creating it before. Now C<exists $Foo::{Bar::}> can be +used to test if the C<Foo::Bar> namespace has been created. =head2 Better locale support @@ -216,8 +367,7 @@ See L<perlfunc/prototype>. C<die()> now accepts a reference value, and C<$@> gets set to that value in exception traps. This makes it possible to propagate -exception objects. See L<perlfunc/eval>. [XXX there's nothing -about this in perlfunc/eval yet.] +exception objects. This is an undocumented B<experimental> feature. =head2 Re-blessing in DESTROY() supported for chaining DESTROY() methods @@ -233,8 +383,6 @@ C<INIT> subs are like C<BEGIN> and C<END>, but they get run just before the perl runtime begins execution. e.g., the Perl Compiler makes use of C<INIT> blocks to initialize and resolve pointers to XSUBs. -[XXX Needs to be documented in perlsub or perlmod.] - =head2 New C<lock> keyword The C<lock> keyword is the fundamental synchronization primitive @@ -253,6 +401,9 @@ other regular expressions. See L<perlop>. =head2 C<our> is now a reserved word +Calling a subroutine with the name C<our> will now provoke a warning when +using the C<-w> switch. + =head2 Tied arrays are now fully supported See L<Tie::Array>. @@ -319,12 +470,11 @@ MPE/iX is now supported. See L<README.mpeix>. Win32 support has been vastly enhanced. Support for Perl Object, a C++ encapsulation of Perl. GCC and EGCS are now supported on Win32. -[XXX Perl Object needs a big explanation elsewhere, and a pointer to -that location here.] +See F<README.win32>, aka L<perlwin32>. VMS configuration system has been rewritten. See L<README.vms>. -OpenBSD better supported. [XXX what others?] +The hints files for most Unix platforms have seen incremental improvements. =head1 Modules and Pragmata @@ -334,7 +484,7 @@ OpenBSD better supported. [XXX what others?] =item B -Perl compiler and tools. See [XXX what?]. +Perl compiler and tools. See L<B>. =item Data::Dumper @@ -427,7 +577,7 @@ subtle incompatibilities. =item CPAN -[XXX What?] +See <perlmodinstall> and L<CPAN>. =item Cwd @@ -447,21 +597,20 @@ perlcc, a new experimental front end for the compiler is available. The crude GNU configure emulator is now called configure.gnu. -=head1 API Changes - -=head2 Incompatible Changes - -=head2 Deprecations, Extensions - -=head2 C++ Support - =head1 Documentation Changes Config.pm now has a glossary of variables. -Porting/patching.pod has detailed instructions on how to create and +F<Porting/patching.pod> has detailed instructions on how to create and submit patches for perl. +L<perlport> specifies guidelines on how to write portably. + +L<perlmodinstall> describes how to fetch and install modules from C<CPAN> +sites. + +Some more Perl traps are documented now. See L<perltrap>. + =head1 New Diagnostics =over @@ -691,7 +840,6 @@ a B<-e> switch. Maybe your /tmp partition is full, or clobbered. (F) The create routine failed for some reason while trying to process a B<-e> switch. Maybe your /tmp partition is full, or clobbered. - =back =head1 BUGS @@ -719,4 +867,9 @@ The F<Artistic> and F<Copying> files for copyright information. =head1 HISTORY +Written by Gurusamy Sarathy <F<gsar@umich.edu>>, with many contributions +from The Perl Porters. + +Send omissions or corrections to <F<perlbug@perl.com>>. + =cut diff --git a/pod/perlembed.pod b/pod/perlembed.pod index 2aadeffb46..0323fd1110 100644 --- a/pod/perlembed.pod +++ b/pod/perlembed.pod @@ -301,7 +301,7 @@ the first, a C<float> from the second, and a C<char *> from the third. /** Treat $a as a string **/ perl_eval_pv("$a = 'rekcaH lreP rehtonA tsuJ'; $a = reverse($a);", TRUE); - printf("a = %s\n", SvPV(perl_get_sv("a", FALSE), na)); + printf("a = %s\n", SvPV(perl_get_sv("a", FALSE), PL_na)); perl_destruct(my_perl); perl_free(my_perl); @@ -324,7 +324,7 @@ from I<perl_eval_pv()> instead. Example: ... SV *val = perl_eval_pv("reverse 'rekcaH lreP rehtonA tsuJ'", TRUE); - printf("%s\n", SvPV(val,na)); + printf("%s\n", SvPV(val,PL_na)); ... This way, we avoid namespace pollution by not creating global @@ -377,8 +377,8 @@ been wrapped here): retval = POPs; PUTBACK; - if (croak_on_error && SvTRUE(GvSV(errgv))) - croak(SvPVx(GvSV(errgv), na)); + if (croak_on_error && SvTRUE(ERRSV)) + croak(SvPVx(ERRSV, PL_na)); return retval; } @@ -395,7 +395,7 @@ been wrapped here): SV *command = NEWSV(1099, 0), *retval; sv_setpvf(command, "my $string = '%s'; $string =~ %s", - SvPV(string,na), pattern); + SvPV(string,PL_na), pattern); retval = my_perl_eval_sv(command, TRUE); SvREFCNT_dec(command); @@ -416,7 +416,7 @@ been wrapped here): SV *command = NEWSV(1099, 0), *retval; sv_setpvf(command, "$string = '%s'; ($string =~ %s)", - SvPV(*string,na), pattern); + SvPV(*string,PL_na), pattern); retval = my_perl_eval_sv(command, TRUE); SvREFCNT_dec(command); @@ -439,7 +439,7 @@ been wrapped here): I32 num_matches; sv_setpvf(command, "my $string = '%s'; @array = ($string =~ %s)", - SvPV(string,na), pattern); + SvPV(string,PL_na), pattern); my_perl_eval_sv(command, TRUE); SvREFCNT_dec(command); @@ -478,7 +478,7 @@ been wrapped here): printf("matches: m/(wi..)/g found %d matches...\n", num_matches); for (i = 0; i < num_matches; i++) - printf("match: %s\n", SvPV(*av_fetch(match_list, i, FALSE),na)); + printf("match: %s\n", SvPV(*av_fetch(match_list, i, FALSE),PL_na)); printf("\n"); /** Remove all vowels from text **/ @@ -486,7 +486,7 @@ been wrapped here): if (num_matches) { printf("substitute: s/[aeiou]//gi...%d substitutions made.\n", num_matches); - printf("Now text is: %s\n\n", SvPV(text,na)); + printf("Now text is: %s\n\n", SvPV(text,PL_na)); } /** Attempt a substitution **/ @@ -495,7 +495,7 @@ been wrapped here): } SvREFCNT_dec(text); - perl_destruct_level = 1; + PL_perl_destruct_level = 1; perl_destruct(my_perl); perl_free(my_perl); } @@ -744,12 +744,12 @@ with L<perlfunc/my> whenever possible. G_DISCARD | G_EVAL, args); /* check $@ */ - if(SvTRUE(GvSV(errgv))) - fprintf(stderr, "eval error: %s\n", SvPV(GvSV(errgv),na)); + if(SvTRUE(ERRSV)) + fprintf(stderr, "eval error: %s\n", SvPV(ERRSV,PL_na)); } } - perl_destruct_level = 0; + PL_perl_destruct_level = 0; perl_destruct(perl); perl_free(perl); exit(exitstatus); @@ -787,16 +787,16 @@ release any resources associated with the interpreter. The program must take care to ensure that this takes place I<before> the next interpreter is constructed. By default, the global variable -C<perl_destruct_level> is set to C<0>, since extra cleaning isn't +C<PL_perl_destruct_level> is set to C<0>, since extra cleaning isn't needed when a program has only one interpreter. -Setting C<perl_destruct_level> to C<1> makes everything squeaky clean: +Setting C<PL_perl_destruct_level> to C<1> makes everything squeaky clean: - perl_destruct_level = 1; + PL_perl_destruct_level = 1; while(1) { ... - /* reset global variables here with perl_destruct_level = 1 */ + /* reset global variables here with PL_perl_destruct_level = 1 */ perl_construct(my_perl); ... /* clean and reset _everything_ during perl_destruct */ @@ -812,7 +812,7 @@ and symbol tables are cleaned up, and global variables are reset. Now suppose we have more than one interpreter instance running at the same time. This is feasible, but only if you used the C<-DMULTIPLICITY> flag when building Perl. By default, that sets -C<perl_destruct_level> to C<1>. +C<PL_perl_destruct_level> to C<1>. Let's give it a try: diff --git a/pod/perlguts.pod b/pod/perlguts.pod index c20e8b58a6..20a07d3854 100644 --- a/pod/perlguts.pod +++ b/pod/perlguts.pod @@ -95,7 +95,7 @@ or string. In the C<SvPV> macro, the length of the string returned is placed into the variable C<len> (this is a macro, so you do I<not> use C<&len>). If you do not -care what the length of the data is, use the global variable C<na>. Remember, +care what the length of the data is, use the global variable C<PL_na>. Remember, however, that Perl allows arbitrary strings of data that may both contain NULs and might not be terminated by a NUL. @@ -167,14 +167,14 @@ you can call: SvOK(SV*) -The scalar C<undef> value is stored in an SV instance called C<sv_undef>. Its +The scalar C<undef> value is stored in an SV instance called C<PL_sv_undef>. Its address can be used whenever an C<SV*> is needed. -There are also the two values C<sv_yes> and C<sv_no>, which contain Boolean -TRUE and FALSE values, respectively. Like C<sv_undef>, their addresses can +There are also the two values C<PL_sv_yes> and C<PL_sv_no>, which contain Boolean +TRUE and FALSE values, respectively. Like C<PL_sv_undef>, their addresses can be used whenever an C<SV*> is needed. -Do not be fooled into thinking that C<(SV *) 0> is the same as C<&sv_undef>. +Do not be fooled into thinking that C<(SV *) 0> is the same as C<&PL_sv_undef>. Take this code: SV* sv = (SV*) 0; @@ -186,7 +186,7 @@ Take this code: This code tries to return a new SV (which contains the value 42) if it should return a real value, or undef otherwise. Instead it has returned a NULL pointer which, somewhere down the line, will cause a segmentation violation, -bus error, or just weird results. Change the zero to C<&sv_undef> in the first +bus error, or just weird results. Change the zero to C<&PL_sv_undef> in the first line and all will be well. To free an SV that you've created, call C<SvREFCNT_dec(SV*)>. Normally this @@ -618,10 +618,10 @@ including (but not limited to) the following: Format Subroutine -There is a single stash called "defstash" that holds the items that exist +There is a single stash called "PL_defstash" that holds the items that exist in the "main" package. To get at the items in other packages, append the string "::" to the package name. The items in the "Foo" package are in -the stash "Foo::" in defstash. The items in the "Bar::Baz" package are +the stash "Foo::" in PL_defstash. The items in the "Bar::Baz" package are in the stash "Baz::" in "Bar::"'s stash. To get the stash pointer for a particular package, use the function: @@ -1041,7 +1041,7 @@ string pointed to by C<key> is Safefree()ed. If one has a I<key> in short-lived storage, the corresponding string may be reallocated like this: - SAVEDELETE(defstash, savepv(tmpbuf), strlen(tmpbuf)); + SAVEDELETE(PL_defstash, savepv(tmpbuf), strlen(tmpbuf)); =item C<SAVEDESTRUCTOR(f,p)> @@ -1451,6 +1451,14 @@ are subject to the same restrictions as in the pass 2. This is a listing of functions, macros, flags, and variables that may be useful to extension writers or that may be found while reading other extensions. + +Note that all Perl API global variables must be referenced with the C<PL_> +prefix. Some macros are provided for compatibility with the older, +unadorned names, but this support will be removed in a future release. + +It is strongly recommended that all Perl API functions that don't begin +with C<perl> be referenced with an explicit C<Perl_> prefix. + The sort order of the listing is case insensitive, with any occurrences of '_' ignored for the the purpose of sorting. @@ -1501,7 +1509,7 @@ will have a reference count of 1. =item av_pop -Pops an SV off the end of the array. Returns C<&sv_undef> if the array is +Pops an SV off the end of the array. Returns C<&PL_sv_undef> if the array is empty. SV* av_pop (AV* ar) @@ -1572,27 +1580,27 @@ Returns the stash of the CV. HV* CvSTASH( SV* sv ) -=item DBsingle +=item PL_DBsingle When Perl is run in debugging mode, with the B<-d> switch, this SV is a boolean which indicates whether subs are being single-stepped. Single-stepping is automatically turned on after every step. This is the C -variable which corresponds to Perl's $DB::single variable. See C<DBsub>. +variable which corresponds to Perl's $DB::single variable. See C<PL_DBsub>. -=item DBsub +=item PL_DBsub When Perl is run in debugging mode, with the B<-d> switch, this GV contains the SV which holds the name of the sub being debugged. This is the C -variable which corresponds to Perl's $DB::sub variable. See C<DBsingle>. +variable which corresponds to Perl's $DB::sub variable. See C<PL_DBsingle>. The sub name can be found by - SvPV( GvSV( DBsub ), na ) + SvPV( GvSV( PL_DBsub ), PL_na ) -=item DBtrace +=item PL_DBtrace Trace variable used when Perl is run in debugging mode, with the B<-d> switch. This is the C variable which corresponds to Perl's $DB::trace -variable. See C<DBsingle>. +variable. See C<PL_DBsingle>. =item dMARK @@ -1603,7 +1611,7 @@ C<dORIGMARK>. Saves the original stack mark for the XSUB. See C<ORIGMARK>. -=item dowarn +=item PL_dowarn The C variable which corresponds to Perl's $^W warning variable. @@ -1806,7 +1814,7 @@ Returns the key slot of the hash entry as a C<char*> value, doing any necessary dereferencing of possibly C<SV*> keys. The length of the string is placed in C<len> (this is a macro, so do I<not> use C<&len>). If you do not care about what the length of the key is, -you may use the global variable C<na>. Remember though, that hash +you may use the global variable C<PL_na>. Remember though, that hash keys in perl are free to contain embedded nulls, so using C<strlen()> or similar is not a good way to find the length of hash keys. This is very similar to the C<SvPV()> macro described elsewhere in @@ -2143,7 +2151,7 @@ the type. Can do overlapping moves. See also C<Copy>. void Move( s, d, n, t ) -=item na +=item PL_na A variable which may be used with C<SvPV> to tell Perl to calculate the string length. @@ -2878,9 +2886,9 @@ double. Checks the B<private> setting. Use C<SvNIOK>. int SvNIOKp (SV* SV) -=item sv_no +=item PL_sv_no -This is the C<false> SV. See C<sv_yes>. Always refer to this as C<&sv_no>. +This is the C<false> SV. See C<PL_sv_yes>. Always refer to this as C<&PL_sv_no>. =item SvNOK @@ -2938,7 +2946,7 @@ for the SvPVX. This hack is used internally to speed up removal of characters from the beginning of a SvPV. When SvOOK is true, then the start of the allocated string buffer is really (SvPVX - SvIVX). - int SvOOK(Sv* sv) + int SvOOK(SV* sv) =item SvPOK @@ -2974,7 +2982,7 @@ Checks the B<private> setting. Use C<SvPOK>. =item SvPV 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 +if the SV does not contain a string. If C<len> is C<PL_na> then Perl will handle the length on its own. Handles 'get' magic. char* SvPV (SV* sv, int len ) @@ -3144,7 +3152,7 @@ will be returned and will have a reference count of 1. Copies a pointer into a new SV, optionally blessing the SV. The C<rv> argument will be upgraded to an RV. That RV will be modified to point to -the new SV. If the C<pv> argument is NULL then C<sv_undef> will be placed +the new SV. If the C<pv> argument is NULL then C<PL_sv_undef> will be placed into the SV. The C<classname> argument indicates the package for the blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV will be returned and will have a reference count of 1. @@ -3291,9 +3299,9 @@ Returns the type of the SV. See C<svtype>. An enum of flags for Perl types. These are found in the file B<sv.h> in the C<svtype> enum. Test these flags with the C<SvTYPE> macro. -=item sv_undef +=item PL_sv_undef -This is the C<undef> SV. Always refer to this as C<&sv_undef>. +This is the C<undef> SV. Always refer to this as C<&PL_sv_undef>. =item sv_unref @@ -3363,9 +3371,9 @@ Returns the unsigned integer which is stored in the SV. UV SvUVX(SV* sv) -=item sv_yes +=item PL_sv_yes -This is the C<true> SV. See C<sv_no>. Always refer to this as C<&sv_yes>. +This is the C<true> SV. See C<PL_sv_no>. Always refer to this as C<&PL_sv_yes>. =item THIS @@ -3449,7 +3457,7 @@ Return an integer from an XSUB immediately. Uses C<XST_mIV>. =item XSRETURN_NO -Return C<&sv_no> from an XSUB immediately. Uses C<XST_mNO>. +Return C<&PL_sv_no> from an XSUB immediately. Uses C<XST_mNO>. XSRETURN_NO; @@ -3467,13 +3475,13 @@ Return a copy of a string from an XSUB immediately. Uses C<XST_mPV>. =item XSRETURN_UNDEF -Return C<&sv_undef> from an XSUB immediately. Uses C<XST_mUNDEF>. +Return C<&PL_sv_undef> from an XSUB immediately. Uses C<XST_mUNDEF>. XSRETURN_UNDEF; =item XSRETURN_YES -Return C<&sv_yes> from an XSUB immediately. Uses C<XST_mYES>. +Return C<&PL_sv_yes> from an XSUB immediately. Uses C<XST_mYES>. XSRETURN_YES; @@ -3493,7 +3501,7 @@ stored in a new mortal SV. =item XST_mNO -Place C<&sv_no> into the specified position C<i> on the stack. +Place C<&PL_sv_no> into the specified position C<i> on the stack. XST_mNO( int i ) @@ -3506,13 +3514,13 @@ value is stored in a new mortal SV. =item XST_mUNDEF -Place C<&sv_undef> into the specified position C<i> on the stack. +Place C<&PL_sv_undef> into the specified position C<i> on the stack. XST_mUNDEF( int i ) =item XST_mYES -Place C<&sv_yes> into the specified position C<i> on the stack. +Place C<&PL_sv_yes> into the specified position C<i> on the stack. XST_mYES( int i ) diff --git a/pod/perltoc.pod b/pod/perltoc.pod index 67294b4b90..04d37e5d52 100644 --- a/pod/perltoc.pod +++ b/pod/perltoc.pod @@ -862,7 +862,8 @@ CGI script to do bad things? =item C Source Compatibility -Core sources now require ANSI C compiler, Enabling threads has source +Core sources now require ANSI C compiler, All Perl global variables must +now be referenced with an explicit prefix, Enabling threads has source compatibility issues =item Binary Compatibility @@ -885,6 +886,10 @@ compatibility issues =item Regular Expressions +Many new and improved optimizations, Many bug fixes, New regular expression +constructs, New operator for precompiled regular expressions, Other +improvements, Incompatible changes + =item Improved malloc() =item Quicksort is internally implemented @@ -973,18 +978,6 @@ CGI, POSIX, DB_File, MakeMaker, CPAN, Cwd, Benchmark =item Utility Changes -=item API Changes - -=over - -=item Incompatible Changes - -=item Deprecations, Extensions - -=item C++ Support - -=back - =item Documentation Changes =item New Diagnostics @@ -2671,21 +2664,22 @@ save_hptr(HV **hptr)> av_clear, av_extend, av_fetch, AvFILL, av_len, av_make, av_pop, av_push, av_shift, av_store, av_undef, av_unshift, CLASS, Copy, croak, CvSTASH, -DBsingle, DBsub, DBtrace, dMARK, dORIGMARK, dowarn, dSP, dXSARGS, dXSI32, -do_binmode, ENTER, EXTEND, fbm_compile, fbm_instr, FREETMPS, G_ARRAY, -G_DISCARD, G_EVAL, GIMME, GIMME_V, G_NOARGS, G_SCALAR, gv_fetchmeth, -gv_fetchmethod, gv_fetchmethod_autoload, G_VOID, gv_stashpv, gv_stashsv, -GvSV, HEf_SVKEY, HeHASH, HeKEY, HeKLEN, HePV, HeSVKEY, HeSVKEY_force, -HeSVKEY_set, HeVAL, hv_clear, hv_delayfree_ent, hv_delete, hv_delete_ent, -hv_exists, hv_exists_ent, hv_fetch, hv_fetch_ent, hv_free_ent, hv_iterinit, -hv_iterkey, hv_iterkeysv, hv_iternext, hv_iternextsv, hv_iterval, hv_magic, -HvNAME, hv_store, hv_store_ent, hv_undef, isALNUM, isALPHA, isDIGIT, -isLOWER, isSPACE, isUPPER, items, ix, LEAVE, looks_like_number, MARK, -mg_clear, mg_copy, mg_find, mg_free, mg_get, mg_len, mg_magical, mg_set, -Move, na, New, newAV, Newc, newCONSTSUB, newHV, newRV_inc, newRV_noinc, -NEWSV, newSViv, newSVnv, newSVpv, newSVpvf, newSVpvn, newSVrv, newSVsv, -newXS, newXSproto, Newz, Nullav, Nullch, Nullcv, Nullhv, Nullsv, ORIGMARK, -perl_alloc, perl_call_argv, perl_call_method, perl_call_pv, perl_call_sv, +PL_DBsingle, PL_DBsub, PL_DBtrace, dMARK, dORIGMARK, PL_dowarn, dSP, +dXSARGS, dXSI32, do_binmode, ENTER, EXTEND, fbm_compile, fbm_instr, +FREETMPS, G_ARRAY, G_DISCARD, G_EVAL, GIMME, GIMME_V, G_NOARGS, G_SCALAR, +gv_fetchmeth, gv_fetchmethod, gv_fetchmethod_autoload, G_VOID, gv_stashpv, +gv_stashsv, GvSV, HEf_SVKEY, HeHASH, HeKEY, HeKLEN, HePV, HeSVKEY, +HeSVKEY_force, HeSVKEY_set, HeVAL, hv_clear, hv_delayfree_ent, hv_delete, +hv_delete_ent, hv_exists, hv_exists_ent, hv_fetch, hv_fetch_ent, +hv_free_ent, hv_iterinit, hv_iterkey, hv_iterkeysv, hv_iternext, +hv_iternextsv, hv_iterval, hv_magic, HvNAME, hv_store, hv_store_ent, +hv_undef, isALNUM, isALPHA, isDIGIT, isLOWER, isSPACE, isUPPER, items, ix, +LEAVE, looks_like_number, MARK, mg_clear, mg_copy, mg_find, mg_free, +mg_get, mg_len, mg_magical, mg_set, Move, PL_na, New, newAV, Newc, +newCONSTSUB, newHV, newRV_inc, newRV_noinc, NEWSV, newSViv, newSVnv, +newSVpv, newSVpvf, newSVpvn, newSVrv, newSVsv, newXS, newXSproto, Newz, +Nullav, Nullch, Nullcv, Nullhv, Nullsv, ORIGMARK, perl_alloc, +perl_call_argv, perl_call_method, perl_call_pv, perl_call_sv, perl_construct, perl_destruct, perl_eval_sv, perl_eval_pv, perl_free, perl_get_av, perl_get_cv, perl_get_hv, perl_get_sv, perl_parse, perl_require_pv, perl_run, POPi, POPl, POPp, POPn, POPs, PUSHMARK, PUSHi, @@ -2697,7 +2691,7 @@ sv_catsv, sv_catsv_mg, sv_chop, sv_cmp, SvCUR, SvCUR_set, sv_dec, sv_derived_from, sv_derived_from, SvEND, sv_eq, SvGETMAGIC, SvGROW, sv_grow, sv_inc, sv_insert, SvIOK, SvIOK_off, SvIOK_on, SvIOK_only, SvIOKp, sv_isa, sv_isobject, SvIV, SvIVX, SvLEN, sv_len, sv_magic, sv_mortalcopy, -sv_newmortal, SvNIOK, SvNIOK_off, SvNIOKp, sv_no, SvNOK, SvNOK_off, +sv_newmortal, SvNIOK, SvNIOK_off, SvNIOKp, PL_sv_no, SvNOK, SvNOK_off, SvNOK_on, SvNOK_only, SvNOKp, SvNV, SvNVX, SvOK, SvOOK, SvPOK, SvPOK_off, SvPOK_on, SvPOK_only, SvPOKp, SvPV, SvPV_force, SvPVX, SvREFCNT, SvREFCNT_dec, SvREFCNT_inc, SvROK, SvROK_off, SvROK_on, SvRV, SvSETMAGIC, @@ -2707,10 +2701,10 @@ sv_setpvf_mg, sv_setref_iv, sv_setref_nv, sv_setref_pv, sv_setref_pvn, SvSetSV, SvSetSV_nosteal, sv_setsv, sv_setsv_mg, sv_setuv, sv_setuv_mg, SvSTASH, SvTAINT, SvTAINTED, SvTAINTED_off, SvTAINTED_on, SVt_IV, SVt_PV, SVt_PVAV, SVt_PVCV, SVt_PVHV, SVt_PVMG, SVt_NV, SvTRUE, SvTYPE, svtype, -sv_undef, sv_unref, SvUPGRADE, sv_upgrade, sv_usepvn, sv_usepvn_mg, +PL_sv_undef, sv_unref, SvUPGRADE, sv_upgrade, sv_usepvn, sv_usepvn_mg, sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, used_locale), sv_vsetpvfn(sv, pat, patlen, args, svargs, svmax, used_locale), SvUV, -SvUVX, sv_yes, THIS, toLOWER, toUPPER, warn, XPUSHi, XPUSHn, XPUSHp, +SvUVX, PL_sv_yes, THIS, toLOWER, toUPPER, warn, XPUSHi, XPUSHn, XPUSHp, XPUSHs, XPUSHu, XS, XSRETURN, XSRETURN_EMPTY, XSRETURN_IV, XSRETURN_NO, XSRETURN_NV, XSRETURN_PV, XSRETURN_UNDEF, XSRETURN_YES, XST_mIV, XST_mNV, XST_mNO, XST_mPV, XST_mUNDEF, XST_mYES, XS_VERSION, XS_VERSION_BOOTCHECK, diff --git a/pod/perlxs.pod b/pod/perlxs.pod index 1eea753c61..c578a2ec59 100644 --- a/pod/perlxs.pod +++ b/pod/perlxs.pod @@ -372,7 +372,7 @@ and C<$type> can be used as in typemaps. bool_t rpcb_gettime(host,timep) - char *host = (char *)SvPV($arg,na); + char *host = (char *)SvPV($arg,PL_na); time_t &timep = 0; OUTPUT: timep @@ -396,7 +396,7 @@ initialization. bool_t rpcb_gettime(host,timep) time_t &timep ; /*\$v{time}=@{[$v{time}=$arg]}*/ - char *host + SvOK($v{time}) ? SvPV($arg,na) : NULL; + char *host + SvOK($v{time}) ? SvPV($arg,PL_na) : NULL; OUTPUT: timep @@ -555,7 +555,7 @@ The XS code, with ellipsis, follows. char *host = "localhost"; CODE: if( items > 1 ) - host = (char *)SvPV(ST(1), na); + host = (char *)SvPV(ST(1), PL_na); RETVAL = rpcb_gettime( host, &timep ); OUTPUT: timep @@ -681,7 +681,7 @@ return value, should the need arise. sv_setnv( ST(0), (double)timep); } else{ - ST(0) = &sv_undef; + ST(0) = &PL_sv_undef; } To return an empty list one must use a PPCODE: block and @@ -788,7 +788,7 @@ prototypes. char *host = "localhost"; CODE: if( items > 1 ) - host = (char *)SvPV(ST(1), na); + host = (char *)SvPV(ST(1), PL_na); RETVAL = rpcb_gettime( host, &timep ); OUTPUT: timep |