-------------
____________________________________________________________________________
+[ 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
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.
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
*/
static char *local_patches[] = {
NULL
- ,"MAYBE - 5.005, but not just yet"
,NULL
};
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
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 ;
}
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
SPAGAIN ;
SP -= count ;
- ax = (SP - stack_base) + 1 ;
+ ax = (SP - PL_stack_base) + 1 ;
if (count != 2)
croak("Big trouble\n") ;
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.
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.
=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
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
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()
=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
=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
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
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
=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>.
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
=item B
-Perl compiler and tools. See [XXX what?].
+Perl compiler and tools. See L<B>.
=item Data::Dumper
=item CPAN
-[XXX What?]
+See <perlmodinstall> and L<CPAN>.
=item Cwd
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
(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
=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
/** 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);
...
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
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;
}
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);
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);
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);
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 **/
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 **/
}
SvREFCNT_dec(text);
- perl_destruct_level = 1;
+ PL_perl_destruct_level = 1;
perl_destruct(my_perl);
perl_free(my_perl);
}
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);
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 */
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:
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.
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;
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
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:
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)>
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.
=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)
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
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.
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
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.
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
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
=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 )
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.
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
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
=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;
=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;
=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 )
=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 )
=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
=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
=item Utility Changes
-=item API Changes
-
-=over
-
-=item Incompatible Changes
-
-=item Deprecations, Extensions
-
-=item C++ Support
-
-=back
-
=item Documentation Changes
=item New Diagnostics
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,
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,
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,
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
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
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
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
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