17996 lines
481 KiB
Plaintext
17996 lines
481 KiB
Plaintext
-*- buffer-read-only: t -*-
|
|
!!!!!!! DO NOT EDIT THIS FILE !!!!!!!
|
|
This file is built by ..\autodoc.pl extracting documentation from the C
|
|
source files.
|
|
Any changes made here will be lost!
|
|
|
|
=encoding UTF-8
|
|
|
|
=head1 NAME
|
|
|
|
perlapi - autogenerated documentation for the perl public API
|
|
|
|
=head1 DESCRIPTION
|
|
X<Perl API> X<API> X<api>
|
|
|
|
This file contains most of the documentation of the perl public API, as
|
|
generated by F<embed.pl>. Specifically, it is a listing of functions,
|
|
macros, flags, and variables that may be used by extension writers. Some
|
|
specialized items are instead documented in F<config.h>, L<perlapio>, L<perlcall>, L<perlclib>, L<perlfilter>, L<perlguts>, L<perlmroapi>, L<perlxs>, L<perlxstut>, and L<warnings>.
|
|
|
|
L<At the end|/Undocumented functions> is a list of functions which have yet
|
|
to be documented. Patches welcome! The interfaces of these are subject to
|
|
change without notice.
|
|
|
|
Anything not listed here is not part of the public API, and should not be
|
|
used by extension writers at all. For these reasons, blindly using functions
|
|
listed in proto.h is to be avoided when writing extensions.
|
|
|
|
In Perl, unlike C, a string of characters may generally contain embedded
|
|
C<NUL> characters. Sometimes in the documentation a Perl string is referred
|
|
to as a "buffer" to distinguish it from a C string, but sometimes they are
|
|
both just referred to as strings.
|
|
|
|
Note that all Perl API global variables must be referenced with the C<PL_>
|
|
prefix. Again, those not listed here are not to be used by extension writers,
|
|
and can be changed or removed without notice; same with macros.
|
|
Some macros are provided for compatibility with the older,
|
|
unadorned names, but this support may be disabled in a future release.
|
|
|
|
Perl was originally written to handle US-ASCII only (that is characters
|
|
whose ordinal numbers are in the range 0 - 127).
|
|
And documentation and comments may still use the term ASCII, when
|
|
sometimes in fact the entire range from 0 - 255 is meant.
|
|
|
|
The non-ASCII characters below 256 can have various meanings, depending on
|
|
various things. (See, most notably, L<perllocale>.) But usually the whole
|
|
range can be referred to as ISO-8859-1. Often, the term "Latin-1" (or
|
|
"Latin1") is used as an equivalent for ISO-8859-1. But some people treat
|
|
"Latin1" as referring just to the characters in the range 128 through 255, or
|
|
somethimes from 160 through 255.
|
|
This documentation uses "Latin1" and "Latin-1" to refer to all 256 characters.
|
|
|
|
Note that Perl can be compiled and run under either ASCII or EBCDIC (See
|
|
L<perlebcdic>). Most of the documentation (and even comments in the code)
|
|
ignore the EBCDIC possibility.
|
|
For almost all purposes the differences are transparent.
|
|
As an example, under EBCDIC,
|
|
instead of UTF-8, UTF-EBCDIC is used to encode Unicode strings, and so
|
|
whenever this documentation refers to C<utf8>
|
|
(and variants of that name, including in function names),
|
|
it also (essentially transparently) means C<UTF-EBCDIC>.
|
|
But the ordinals of characters differ between ASCII, EBCDIC, and
|
|
the UTF- encodings, and a string encoded in UTF-EBCDIC may occupy a different
|
|
number of bytes than in UTF-8.
|
|
|
|
The listing below is alphabetical, case insensitive.
|
|
|
|
|
|
=head1 Array Manipulation Functions
|
|
|
|
=over 8
|
|
|
|
=item av_clear
|
|
X<av_clear>
|
|
|
|
Frees the all the elements of an array, leaving it empty.
|
|
The XS equivalent of C<@array = ()>. See also L</av_undef>.
|
|
|
|
Note that it is possible that the actions of a destructor called directly
|
|
or indirectly by freeing an element of the array could cause the reference
|
|
count of the array itself to be reduced (e.g. by deleting an entry in the
|
|
symbol table). So it is a possibility that the AV could have been freed
|
|
(or even reallocated) on return from the call unless you hold a reference
|
|
to it.
|
|
|
|
void av_clear(AV *av)
|
|
|
|
=for hackers
|
|
Found in file av.c
|
|
|
|
=item av_create_and_push
|
|
X<av_create_and_push>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Push an SV onto the end of the array, creating the array if necessary.
|
|
A small internal helper function to remove a commonly duplicated idiom.
|
|
|
|
NOTE: this function must be explicitly called as Perl_av_create_and_push with an aTHX_ parameter.
|
|
|
|
void Perl_av_create_and_push(pTHX_ AV **const avp,
|
|
SV *const val)
|
|
|
|
=for hackers
|
|
Found in file av.c
|
|
|
|
=item av_create_and_unshift_one
|
|
X<av_create_and_unshift_one>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Unshifts an SV onto the beginning of the array, creating the array if
|
|
necessary.
|
|
A small internal helper function to remove a commonly duplicated idiom.
|
|
|
|
NOTE: this function must be explicitly called as Perl_av_create_and_unshift_one with an aTHX_ parameter.
|
|
|
|
SV** Perl_av_create_and_unshift_one(pTHX_
|
|
AV **const avp,
|
|
SV *const val)
|
|
|
|
=for hackers
|
|
Found in file av.c
|
|
|
|
=item av_delete
|
|
X<av_delete>
|
|
|
|
Deletes the element indexed by C<key> from the array, makes the element
|
|
mortal, and returns it. If C<flags> equals C<G_DISCARD>, the element is
|
|
freed and NULL is returned. NULL is also returned if C<key> is out of
|
|
range.
|
|
|
|
Perl equivalent: S<C<splice(@myarray, $key, 1, undef)>> (with the
|
|
C<splice> in void context if C<G_DISCARD> is present).
|
|
|
|
SV* av_delete(AV *av, SSize_t key, I32 flags)
|
|
|
|
=for hackers
|
|
Found in file av.c
|
|
|
|
=item av_exists
|
|
X<av_exists>
|
|
|
|
Returns true if the element indexed by C<key> has been initialized.
|
|
|
|
This relies on the fact that uninitialized array elements are set to
|
|
C<NULL>.
|
|
|
|
Perl equivalent: C<exists($myarray[$key])>.
|
|
|
|
bool av_exists(AV *av, SSize_t key)
|
|
|
|
=for hackers
|
|
Found in file av.c
|
|
|
|
=item av_extend
|
|
X<av_extend>
|
|
|
|
Pre-extend an array so that it is capable of storing values at indexes
|
|
C<0..key>. Thus C<av_extend(av,99)> guarantees that the array can store 100
|
|
elements, i.e. that C<av_store(av, 0, sv)> through C<av_store(av, 99, sv)>
|
|
on a plain array will work without any further memory allocation.
|
|
|
|
If the av argument is a tied array then will call the C<EXTEND> tied
|
|
array method with an argument of C<(key+1)>.
|
|
|
|
void av_extend(AV *av, SSize_t key)
|
|
|
|
=for hackers
|
|
Found in file av.c
|
|
|
|
=item av_fetch
|
|
X<av_fetch>
|
|
|
|
Returns the SV at the specified index in the array. The C<key> is the
|
|
index. If lval is true, you are guaranteed to get a real SV back (in case
|
|
it wasn't real before), which you can then modify. Check that the return
|
|
value is non-null before dereferencing it to a C<SV*>.
|
|
|
|
See L<perlguts/"Understanding the Magic of Tied Hashes and Arrays"> for
|
|
more information on how to use this function on tied arrays.
|
|
|
|
The rough perl equivalent is C<$myarray[$key]>.
|
|
|
|
SV** av_fetch(AV *av, SSize_t key, I32 lval)
|
|
|
|
=for hackers
|
|
Found in file av.c
|
|
|
|
=item AvFILL
|
|
X<AvFILL>
|
|
|
|
Same as C<av_top_index()> or C<av_tindex()>.
|
|
|
|
int AvFILL(AV* av)
|
|
|
|
=for hackers
|
|
Found in file av.h
|
|
|
|
=item av_fill
|
|
X<av_fill>
|
|
|
|
Set the highest index in the array to the given number, equivalent to
|
|
Perl's S<C<$#array = $fill;>>.
|
|
|
|
The number of elements in the array will be S<C<fill + 1>> after
|
|
C<av_fill()> returns. If the array was previously shorter, then the
|
|
additional elements appended are set to NULL. If the array
|
|
was longer, then the excess elements are freed. S<C<av_fill(av, -1)>> is
|
|
the same as C<av_clear(av)>.
|
|
|
|
void av_fill(AV *av, SSize_t fill)
|
|
|
|
=for hackers
|
|
Found in file av.c
|
|
|
|
=item av_len
|
|
X<av_len>
|
|
|
|
Same as L</av_top_index>. Note that, unlike what the name implies, it returns
|
|
the highest index in the array, so to get the size of the array you need to use
|
|
S<C<av_len(av) + 1>>. This is unlike L</sv_len>, which returns what you would
|
|
expect.
|
|
|
|
SSize_t av_len(AV *av)
|
|
|
|
=for hackers
|
|
Found in file av.c
|
|
|
|
=item av_make
|
|
X<av_make>
|
|
|
|
Creates a new AV and populates it with a list of SVs. The SVs are copied
|
|
into the array, so they may be freed after the call to C<av_make>. The new AV
|
|
will have a reference count of 1.
|
|
|
|
Perl equivalent: C<my @new_array = ($scalar1, $scalar2, $scalar3...);>
|
|
|
|
AV* av_make(SSize_t size, SV **strp)
|
|
|
|
=for hackers
|
|
Found in file av.c
|
|
|
|
=item av_pop
|
|
X<av_pop>
|
|
|
|
Removes one SV from the end of the array, reducing its size by one and
|
|
returning the SV (transferring control of one reference count) to the
|
|
caller. Returns C<&PL_sv_undef> if the array is empty.
|
|
|
|
Perl equivalent: C<pop(@myarray);>
|
|
|
|
SV* av_pop(AV *av)
|
|
|
|
=for hackers
|
|
Found in file av.c
|
|
|
|
=item av_push
|
|
X<av_push>
|
|
|
|
Pushes an SV (transferring control of one reference count) onto the end of the
|
|
array. The array will grow automatically to accommodate the addition.
|
|
|
|
Perl equivalent: C<push @myarray, $val;>.
|
|
|
|
void av_push(AV *av, SV *val)
|
|
|
|
=for hackers
|
|
Found in file av.c
|
|
|
|
=item av_shift
|
|
X<av_shift>
|
|
|
|
Removes one SV from the start of the array, reducing its size by one and
|
|
returning the SV (transferring control of one reference count) to the
|
|
caller. Returns C<&PL_sv_undef> if the array is empty.
|
|
|
|
Perl equivalent: C<shift(@myarray);>
|
|
|
|
SV* av_shift(AV *av)
|
|
|
|
=for hackers
|
|
Found in file av.c
|
|
|
|
=item av_store
|
|
X<av_store>
|
|
|
|
Stores an SV in an array. The array index is specified as C<key>. The
|
|
return value will be C<NULL> if the operation failed or if the value did not
|
|
need to be actually stored within the array (as in the case of tied
|
|
arrays). Otherwise, it can be dereferenced
|
|
to get the C<SV*> that was stored
|
|
there (= C<val>)).
|
|
|
|
Note that the caller is responsible for suitably incrementing the reference
|
|
count of C<val> before the call, and decrementing it if the function
|
|
returned C<NULL>.
|
|
|
|
Approximate Perl equivalent: C<splice(@myarray, $key, 1, $val)>.
|
|
|
|
See L<perlguts/"Understanding the Magic of Tied Hashes and Arrays"> for
|
|
more information on how to use this function on tied arrays.
|
|
|
|
SV** av_store(AV *av, SSize_t key, SV *val)
|
|
|
|
=for hackers
|
|
Found in file av.c
|
|
|
|
=item av_tindex
|
|
X<av_tindex>
|
|
|
|
Same as C<av_top_index()>.
|
|
|
|
SSize_t av_tindex(AV *av)
|
|
|
|
=for hackers
|
|
Found in file av.h
|
|
|
|
=item av_top_index
|
|
X<av_top_index>
|
|
|
|
Returns the highest index in the array. The number of elements in the
|
|
array is S<C<av_top_index(av) + 1>>. Returns -1 if the array is empty.
|
|
|
|
The Perl equivalent for this is C<$#myarray>.
|
|
|
|
(A slightly shorter form is C<av_tindex>.)
|
|
|
|
SSize_t av_top_index(AV *av)
|
|
|
|
=for hackers
|
|
Found in file av.c
|
|
|
|
=item av_undef
|
|
X<av_undef>
|
|
|
|
Undefines the array. The XS equivalent of C<undef(@array)>.
|
|
|
|
As well as freeing all the elements of the array (like C<av_clear()>), this
|
|
also frees the memory used by the av to store its list of scalars.
|
|
|
|
See L</av_clear> for a note about the array possibly being invalid on
|
|
return.
|
|
|
|
void av_undef(AV *av)
|
|
|
|
=for hackers
|
|
Found in file av.c
|
|
|
|
=item av_unshift
|
|
X<av_unshift>
|
|
|
|
Unshift the given number of C<undef> values onto the beginning of the
|
|
array. The array will grow automatically to accommodate the addition.
|
|
|
|
Perl equivalent: S<C<unshift @myarray, ((undef) x $num);>>
|
|
|
|
void av_unshift(AV *av, SSize_t num)
|
|
|
|
=for hackers
|
|
Found in file av.c
|
|
|
|
=item get_av
|
|
X<get_av>
|
|
|
|
Returns the AV of the specified Perl global or package array with the given
|
|
name (so it won't work on lexical variables). C<flags> are passed
|
|
to C<gv_fetchpv>. If C<GV_ADD> is set and the
|
|
Perl variable does not exist then it will be created. If C<flags> is zero
|
|
and the variable does not exist then NULL is returned.
|
|
|
|
Perl equivalent: C<@{"$name"}>.
|
|
|
|
NOTE: the perl_ form of this function is deprecated.
|
|
|
|
AV* get_av(const char *name, I32 flags)
|
|
|
|
=for hackers
|
|
Found in file perl.c
|
|
|
|
=item newAV
|
|
X<newAV>
|
|
|
|
Creates a new AV. The reference count is set to 1.
|
|
|
|
Perl equivalent: C<my @array;>.
|
|
|
|
AV* newAV()
|
|
|
|
=for hackers
|
|
Found in file av.h
|
|
|
|
=item sortsv
|
|
X<sortsv>
|
|
|
|
In-place sort an array of SV pointers with the given comparison routine.
|
|
|
|
Currently this always uses mergesort. See C<L</sortsv_flags>> for a more
|
|
flexible routine.
|
|
|
|
void sortsv(SV** array, size_t num_elts,
|
|
SVCOMPARE_t cmp)
|
|
|
|
=for hackers
|
|
Found in file pp_sort.c
|
|
|
|
|
|
=back
|
|
|
|
=head1 Callback Functions
|
|
|
|
=over 8
|
|
|
|
=item call_argv
|
|
X<call_argv>
|
|
|
|
Performs a callback to the specified named and package-scoped Perl subroutine
|
|
with C<argv> (a C<NULL>-terminated array of strings) as arguments. See
|
|
L<perlcall>.
|
|
|
|
Approximate Perl equivalent: C<&{"$sub_name"}(@$argv)>.
|
|
|
|
NOTE: the perl_ form of this function is deprecated.
|
|
|
|
I32 call_argv(const char* sub_name, I32 flags,
|
|
char** argv)
|
|
|
|
=for hackers
|
|
Found in file perl.c
|
|
|
|
=item call_method
|
|
X<call_method>
|
|
|
|
Performs a callback to the specified Perl method. The blessed object must
|
|
be on the stack. See L<perlcall>.
|
|
|
|
NOTE: the perl_ form of this function is deprecated.
|
|
|
|
I32 call_method(const char* methname, I32 flags)
|
|
|
|
=for hackers
|
|
Found in file perl.c
|
|
|
|
=item call_pv
|
|
X<call_pv>
|
|
|
|
Performs a callback to the specified Perl sub. See L<perlcall>.
|
|
|
|
NOTE: the perl_ form of this function is deprecated.
|
|
|
|
I32 call_pv(const char* sub_name, I32 flags)
|
|
|
|
=for hackers
|
|
Found in file perl.c
|
|
|
|
=item call_sv
|
|
X<call_sv>
|
|
|
|
Performs a callback to the Perl sub specified by the SV.
|
|
|
|
If neither the C<G_METHOD> nor C<G_METHOD_NAMED> flag is supplied, the
|
|
SV may be any of a CV, a GV, a reference to a CV, a reference to a GV
|
|
or C<SvPV(sv)> will be used as the name of the sub to call.
|
|
|
|
If the C<G_METHOD> flag is supplied, the SV may be a reference to a CV or
|
|
C<SvPV(sv)> will be used as the name of the method to call.
|
|
|
|
If the C<G_METHOD_NAMED> flag is supplied, C<SvPV(sv)> will be used as
|
|
the name of the method to call.
|
|
|
|
Some other values are treated specially for internal use and should
|
|
not be depended on.
|
|
|
|
See L<perlcall>.
|
|
|
|
NOTE: the perl_ form of this function is deprecated.
|
|
|
|
I32 call_sv(SV* sv, volatile I32 flags)
|
|
|
|
=for hackers
|
|
Found in file perl.c
|
|
|
|
=item ENTER
|
|
X<ENTER>
|
|
|
|
Opening bracket on a callback. See C<L</LEAVE>> and L<perlcall>.
|
|
|
|
ENTER;
|
|
|
|
=for hackers
|
|
Found in file scope.h
|
|
|
|
=item ENTER_with_name
|
|
X<ENTER_with_name>
|
|
|
|
Same as C<L</ENTER>>, but when debugging is enabled it also associates the
|
|
given literal string with the new scope.
|
|
|
|
ENTER_with_name("name");
|
|
|
|
=for hackers
|
|
Found in file scope.h
|
|
|
|
=item eval_pv
|
|
X<eval_pv>
|
|
|
|
Tells Perl to C<eval> the given string in scalar context and return an SV* result.
|
|
|
|
NOTE: the perl_ form of this function is deprecated.
|
|
|
|
SV* eval_pv(const char* p, I32 croak_on_error)
|
|
|
|
=for hackers
|
|
Found in file perl.c
|
|
|
|
=item eval_sv
|
|
X<eval_sv>
|
|
|
|
Tells Perl to C<eval> the string in the SV. It supports the same flags
|
|
as C<call_sv>, with the obvious exception of C<G_EVAL>. See L<perlcall>.
|
|
|
|
The C<G_RETHROW> flag can be used if you only need eval_sv() to
|
|
execute code specified by a string, but not catch any errors.
|
|
|
|
NOTE: the perl_ form of this function is deprecated.
|
|
|
|
I32 eval_sv(SV* sv, I32 flags)
|
|
|
|
=for hackers
|
|
Found in file perl.c
|
|
|
|
=item FREETMPS
|
|
X<FREETMPS>
|
|
|
|
Closing bracket for temporaries on a callback. See C<L</SAVETMPS>> and
|
|
L<perlcall>.
|
|
|
|
FREETMPS;
|
|
|
|
=for hackers
|
|
Found in file scope.h
|
|
|
|
=item LEAVE
|
|
X<LEAVE>
|
|
|
|
Closing bracket on a callback. See C<L</ENTER>> and L<perlcall>.
|
|
|
|
LEAVE;
|
|
|
|
=for hackers
|
|
Found in file scope.h
|
|
|
|
=item LEAVE_with_name
|
|
X<LEAVE_with_name>
|
|
|
|
Same as C<L</LEAVE>>, but when debugging is enabled it first checks that the
|
|
scope has the given name. C<name> must be a literal string.
|
|
|
|
LEAVE_with_name("name");
|
|
|
|
=for hackers
|
|
Found in file scope.h
|
|
|
|
=item SAVETMPS
|
|
X<SAVETMPS>
|
|
|
|
Opening bracket for temporaries on a callback. See C<L</FREETMPS>> and
|
|
L<perlcall>.
|
|
|
|
SAVETMPS;
|
|
|
|
=for hackers
|
|
Found in file scope.h
|
|
|
|
|
|
=back
|
|
|
|
=head1 Character case changing
|
|
|
|
Perl uses "full" Unicode case mappings. This means that converting a single
|
|
character to another case may result in a sequence of more than one character.
|
|
For example, the uppercase of C<E<223>> (LATIN SMALL LETTER SHARP S) is the two
|
|
character sequence C<SS>. This presents some complications The lowercase of
|
|
all characters in the range 0..255 is a single character, and thus
|
|
C<L</toLOWER_L1>> is furnished. But, C<toUPPER_L1> can't exist, as it couldn't
|
|
return a valid result for all legal inputs. Instead C<L</toUPPER_uvchr>> has
|
|
an API that does allow every possible legal result to be returned.) Likewise
|
|
no other function that is crippled by not being able to give the correct
|
|
results for the full range of possible inputs has been implemented here.
|
|
|
|
|
|
=over 8
|
|
|
|
=item toFOLD
|
|
X<toFOLD>
|
|
|
|
Converts the specified character to foldcase. If the input is anything but an
|
|
ASCII uppercase character, that input character itself is returned. Variant
|
|
C<toFOLD_A> is equivalent. (There is no equivalent C<to_FOLD_L1> for the full
|
|
Latin1 range, as the full generality of L</toFOLD_uvchr> is needed there.)
|
|
|
|
U8 toFOLD(U8 ch)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item toFOLD_utf8
|
|
X<toFOLD_utf8>
|
|
|
|
Converts the first UTF-8 encoded character in the sequence starting at C<p> and
|
|
extending no further than S<C<e - 1>> to its foldcase version, and
|
|
stores that in UTF-8 in C<s>, and its length in bytes in C<lenp>. Note
|
|
that the buffer pointed to by C<s> needs to be at least C<UTF8_MAXBYTES_CASE+1>
|
|
bytes since the foldcase version may be longer than the original character.
|
|
|
|
The first code point of the foldcased version is returned
|
|
(but note, as explained at L<the top of this section|/Character case
|
|
changing>, that there may be more).
|
|
|
|
It will not attempt
|
|
to read beyond S<C<e - 1>>, provided that the constraint S<C<s E<lt> e>> is
|
|
true (this is asserted for in C<-DDEBUGGING> builds). If the UTF-8 for the
|
|
input character is malformed in some way, the program may croak, or the
|
|
function may return the REPLACEMENT CHARACTER, at the discretion of the
|
|
implementation, and subject to change in future releases.
|
|
|
|
UV toFOLD_utf8(U8* p, U8* e, U8* s, STRLEN* lenp)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item toFOLD_utf8_safe
|
|
X<toFOLD_utf8_safe>
|
|
|
|
Same as L</toFOLD_utf8>.
|
|
|
|
UV toFOLD_utf8_safe(U8* p, U8* e, U8* s,
|
|
STRLEN* lenp)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item toFOLD_uvchr
|
|
X<toFOLD_uvchr>
|
|
|
|
Converts the code point C<cp> to its foldcase version, and
|
|
stores that in UTF-8 in C<s>, and its length in bytes in C<lenp>. The code
|
|
point is interpreted as native if less than 256; otherwise as Unicode. Note
|
|
that the buffer pointed to by C<s> needs to be at least C<UTF8_MAXBYTES_CASE+1>
|
|
bytes since the foldcase version may be longer than the original character.
|
|
|
|
The first code point of the foldcased version is returned
|
|
(but note, as explained at L<the top of this section|/Character case
|
|
changing>, that there may be more).
|
|
|
|
UV toFOLD_uvchr(UV cp, U8* s, STRLEN* lenp)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item toLOWER
|
|
X<toLOWER>
|
|
|
|
Converts the specified character to lowercase. If the input is anything but an
|
|
ASCII uppercase character, that input character itself is returned. Variant
|
|
C<toLOWER_A> is equivalent.
|
|
|
|
U8 toLOWER(U8 ch)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item toLOWER_L1
|
|
X<toLOWER_L1>
|
|
|
|
Converts the specified Latin1 character to lowercase. The results are
|
|
undefined if the input doesn't fit in a byte.
|
|
|
|
U8 toLOWER_L1(U8 ch)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item toLOWER_LC
|
|
X<toLOWER_LC>
|
|
|
|
Converts the specified character to lowercase using the current locale's rules,
|
|
if possible; otherwise returns the input character itself.
|
|
|
|
U8 toLOWER_LC(U8 ch)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item toLOWER_utf8
|
|
X<toLOWER_utf8>
|
|
|
|
Converts the first UTF-8 encoded character in the sequence starting at C<p> and
|
|
extending no further than S<C<e - 1>> to its lowercase version, and
|
|
stores that in UTF-8 in C<s>, and its length in bytes in C<lenp>. Note
|
|
that the buffer pointed to by C<s> needs to be at least C<UTF8_MAXBYTES_CASE+1>
|
|
bytes since the lowercase version may be longer than the original character.
|
|
|
|
The first code point of the lowercased version is returned
|
|
(but note, as explained at L<the top of this section|/Character case
|
|
changing>, that there may be more).
|
|
It will not attempt to read beyond S<C<e - 1>>, provided that the constraint
|
|
S<C<s E<lt> e>> is true (this is asserted for in C<-DDEBUGGING> builds). If
|
|
the UTF-8 for the input character is malformed in some way, the program may
|
|
croak, or the function may return the REPLACEMENT CHARACTER, at the discretion
|
|
of the implementation, and subject to change in future releases.
|
|
|
|
UV toLOWER_utf8(U8* p, U8* e, U8* s, STRLEN* lenp)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item toLOWER_utf8_safe
|
|
X<toLOWER_utf8_safe>
|
|
|
|
Same as L</toLOWER_utf8>.
|
|
|
|
UV toLOWER_utf8_safe(U8* p, U8* e, U8* s,
|
|
STRLEN* lenp)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item toLOWER_uvchr
|
|
X<toLOWER_uvchr>
|
|
|
|
Converts the code point C<cp> to its lowercase version, and
|
|
stores that in UTF-8 in C<s>, and its length in bytes in C<lenp>. The code
|
|
point is interpreted as native if less than 256; otherwise as Unicode. Note
|
|
that the buffer pointed to by C<s> needs to be at least C<UTF8_MAXBYTES_CASE+1>
|
|
bytes since the lowercase version may be longer than the original character.
|
|
|
|
The first code point of the lowercased version is returned
|
|
(but note, as explained at L<the top of this section|/Character case
|
|
changing>, that there may be more).
|
|
|
|
UV toLOWER_uvchr(UV cp, U8* s, STRLEN* lenp)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item toTITLE
|
|
X<toTITLE>
|
|
|
|
Converts the specified character to titlecase. If the input is anything but an
|
|
ASCII lowercase character, that input character itself is returned. Variant
|
|
C<toTITLE_A> is equivalent. (There is no C<toTITLE_L1> for the full Latin1
|
|
range, as the full generality of L</toTITLE_uvchr> is needed there. Titlecase is
|
|
not a concept used in locale handling, so there is no functionality for that.)
|
|
|
|
U8 toTITLE(U8 ch)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item toTITLE_utf8
|
|
X<toTITLE_utf8>
|
|
|
|
Converts the first UTF-8 encoded character in the sequence starting at C<p> and
|
|
extending no further than S<C<e - 1>> to its titlecase version, and
|
|
stores that in UTF-8 in C<s>, and its length in bytes in C<lenp>. Note
|
|
that the buffer pointed to by C<s> needs to be at least C<UTF8_MAXBYTES_CASE+1>
|
|
bytes since the titlecase version may be longer than the original character.
|
|
|
|
The first code point of the titlecased version is returned
|
|
(but note, as explained at L<the top of this section|/Character case
|
|
changing>, that there may be more).
|
|
|
|
It will not attempt
|
|
to read beyond S<C<e - 1>>, provided that the constraint S<C<s E<lt> e>> is
|
|
true (this is asserted for in C<-DDEBUGGING> builds). If the UTF-8 for the
|
|
input character is malformed in some way, the program may croak, or the
|
|
function may return the REPLACEMENT CHARACTER, at the discretion of the
|
|
implementation, and subject to change in future releases.
|
|
|
|
UV toTITLE_utf8(U8* p, U8* e, U8* s, STRLEN* lenp)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item toTITLE_utf8_safe
|
|
X<toTITLE_utf8_safe>
|
|
|
|
Same as L</toTITLE_utf8>.
|
|
|
|
UV toTITLE_utf8_safe(U8* p, U8* e, U8* s,
|
|
STRLEN* lenp)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item toTITLE_uvchr
|
|
X<toTITLE_uvchr>
|
|
|
|
Converts the code point C<cp> to its titlecase version, and
|
|
stores that in UTF-8 in C<s>, and its length in bytes in C<lenp>. The code
|
|
point is interpreted as native if less than 256; otherwise as Unicode. Note
|
|
that the buffer pointed to by C<s> needs to be at least C<UTF8_MAXBYTES_CASE+1>
|
|
bytes since the titlecase version may be longer than the original character.
|
|
|
|
The first code point of the titlecased version is returned
|
|
(but note, as explained at L<the top of this section|/Character case
|
|
changing>, that there may be more).
|
|
|
|
UV toTITLE_uvchr(UV cp, U8* s, STRLEN* lenp)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item toUPPER
|
|
X<toUPPER>
|
|
|
|
Converts the specified character to uppercase. If the input is anything but an
|
|
ASCII lowercase character, that input character itself is returned. Variant
|
|
C<toUPPER_A> is equivalent.
|
|
|
|
U8 toUPPER(int ch)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item toUPPER_utf8
|
|
X<toUPPER_utf8>
|
|
|
|
Converts the first UTF-8 encoded character in the sequence starting at C<p> and
|
|
extending no further than S<C<e - 1>> to its uppercase version, and
|
|
stores that in UTF-8 in C<s>, and its length in bytes in C<lenp>. Note
|
|
that the buffer pointed to by C<s> needs to be at least C<UTF8_MAXBYTES_CASE+1>
|
|
bytes since the uppercase version may be longer than the original character.
|
|
|
|
The first code point of the uppercased version is returned
|
|
(but note, as explained at L<the top of this section|/Character case
|
|
changing>, that there may be more).
|
|
|
|
It will not attempt to read beyond S<C<e - 1>>, provided that the constraint
|
|
S<C<s E<lt> e>> is true (this is asserted for in C<-DDEBUGGING> builds). If
|
|
the UTF-8 for the input character is malformed in some way, the program may
|
|
croak, or the function may return the REPLACEMENT CHARACTER, at the discretion
|
|
of the implementation, and subject to change in future releases.
|
|
|
|
UV toUPPER_utf8(U8* p, U8* e, U8* s, STRLEN* lenp)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item toUPPER_utf8_safe
|
|
X<toUPPER_utf8_safe>
|
|
|
|
Same as L</toUPPER_utf8>.
|
|
|
|
UV toUPPER_utf8_safe(U8* p, U8* e, U8* s,
|
|
STRLEN* lenp)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item toUPPER_uvchr
|
|
X<toUPPER_uvchr>
|
|
|
|
Converts the code point C<cp> to its uppercase version, and
|
|
stores that in UTF-8 in C<s>, and its length in bytes in C<lenp>. The code
|
|
point is interpreted as native if less than 256; otherwise as Unicode. Note
|
|
that the buffer pointed to by C<s> needs to be at least C<UTF8_MAXBYTES_CASE+1>
|
|
bytes since the uppercase version may be longer than the original character.
|
|
|
|
The first code point of the uppercased version is returned
|
|
(but note, as explained at L<the top of this section|/Character case
|
|
changing>, that there may be more.)
|
|
|
|
UV toUPPER_uvchr(UV cp, U8* s, STRLEN* lenp)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item WIDEST_UTYPE
|
|
X<WIDEST_UTYPE>
|
|
|
|
Yields the widest unsigned integer type on the platform, currently either
|
|
C<U32> or C<64>. This can be used in declarations such as
|
|
|
|
WIDEST_UTYPE my_uv;
|
|
|
|
or casts
|
|
|
|
my_uv = (WIDEST_UTYPE) val;
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
|
|
=back
|
|
|
|
=head1 Character classification
|
|
|
|
This section is about functions (really macros) that classify characters
|
|
into types, such as punctuation versus alphabetic, etc. Most of these are
|
|
analogous to regular expression character classes. (See
|
|
L<perlrecharclass/POSIX Character Classes>.) There are several variants for
|
|
each class. (Not all macros have all variants; each item below lists the
|
|
ones valid for it.) None are affected by C<use bytes>, and only the ones
|
|
with C<LC> in the name are affected by the current locale.
|
|
|
|
The base function, e.g., C<isALPHA()>, takes any signed or unsigned value,
|
|
treating it as a code point, and returns a boolean as to whether or not the
|
|
character represented by it is (or on non-ASCII platforms, corresponds to) an
|
|
ASCII character in the named class based on platform, Unicode, and Perl rules.
|
|
If the input is a number that doesn't fit in an octet, FALSE is returned.
|
|
|
|
Variant C<isI<FOO>_A> (e.g., C<isALPHA_A()>) is identical to the base function
|
|
with no suffix C<"_A">. This variant is used to emphasize by its name that
|
|
only ASCII-range characters can return TRUE.
|
|
|
|
Variant C<isI<FOO>_L1> imposes the Latin-1 (or EBCDIC equivalent) character set
|
|
onto the platform. That is, the code points that are ASCII are unaffected,
|
|
since ASCII is a subset of Latin-1. But the non-ASCII code points are treated
|
|
as if they are Latin-1 characters. For example, C<isWORDCHAR_L1()> will return
|
|
true when called with the code point 0xDF, which is a word character in both
|
|
ASCII and EBCDIC (though it represents different characters in each).
|
|
If the input is a number that doesn't fit in an octet, FALSE is returned.
|
|
(Perl's documentation uses a colloquial definition of Latin-1, to include all
|
|
code points below 256.)
|
|
|
|
Variant C<isI<FOO>_uvchr> is exactly like the C<isI<FOO>_L1> variant, for
|
|
inputs below 256, but if the code point is larger than 255, Unicode rules are
|
|
used to determine if it is in the character class. For example,
|
|
C<isWORDCHAR_uvchr(0x100)> returns TRUE, since 0x100 is LATIN CAPITAL LETTER A
|
|
WITH MACRON in Unicode, and is a word character.
|
|
|
|
Variants C<isI<FOO>_utf8> and C<isI<FOO>_utf8_safe> are like C<isI<FOO>_uvchr>,
|
|
but are used for UTF-8 encoded strings. The two forms are different names for
|
|
the same thing. Each call to one of these classifies the first character of
|
|
the string starting at C<p>. The second parameter, C<e>, points to anywhere in
|
|
the string beyond the first character, up to one byte past the end of the
|
|
entire string. Although both variants are identical, the suffix C<_safe> in
|
|
one name emphasizes that it will not attempt to read beyond S<C<e - 1>>,
|
|
provided that the constraint S<C<s E<lt> e>> is true (this is asserted for in
|
|
C<-DDEBUGGING> builds). If the UTF-8 for the input character is malformed in
|
|
some way, the program may croak, or the function may return FALSE, at the
|
|
discretion of the implementation, and subject to change in future releases.
|
|
|
|
Variant C<isI<FOO>_LC> is like the C<isI<FOO>_A> and C<isI<FOO>_L1> variants,
|
|
but the result is based on the current locale, which is what C<LC> in the name
|
|
stands for. If Perl can determine that the current locale is a UTF-8 locale,
|
|
it uses the published Unicode rules; otherwise, it uses the C library function
|
|
that gives the named classification. For example, C<isDIGIT_LC()> when not in
|
|
a UTF-8 locale returns the result of calling C<isdigit()>. FALSE is always
|
|
returned if the input won't fit into an octet. On some platforms where the C
|
|
library function is known to be defective, Perl changes its result to follow
|
|
the POSIX standard's rules.
|
|
|
|
Variant C<isI<FOO>_LC_uvchr> acts exactly like C<isI<FOO>_LC> for inputs less
|
|
than 256, but for larger ones it returns the Unicode classification of the code
|
|
point.
|
|
|
|
Variants C<isI<FOO>_LC_utf8> and C<isI<FOO>_LC_utf8_safe> are like
|
|
C<isI<FOO>_LC_uvchr>, but are used for UTF-8 encoded strings. The two forms
|
|
are different names for the same thing. Each call to one of these classifies
|
|
the first character of the string starting at C<p>. The second parameter,
|
|
C<e>, points to anywhere in the string beyond the first character, up to one
|
|
byte past the end of the entire string. Although both variants are identical,
|
|
the suffix C<_safe> in one name emphasizes that it will not attempt to read
|
|
beyond S<C<e - 1>>, provided that the constraint S<C<s E<lt> e>> is true (this
|
|
is asserted for in C<-DDEBUGGING> builds). If the UTF-8 for the input
|
|
character is malformed in some way, the program may croak, or the function may
|
|
return FALSE, at the discretion of the implementation, and subject to change in
|
|
future releases.
|
|
|
|
|
|
=over 8
|
|
|
|
=item isALPHA
|
|
X<isALPHA>
|
|
|
|
Returns a boolean indicating whether the specified input is one of C<[A-Za-z]>,
|
|
analogous to C<m/[[:alpha:]]/>.
|
|
See the L<top of this section|/Character classification> for an explanation of
|
|
variants
|
|
C<isALPHA_A>, C<isALPHA_L1>, C<isALPHA_uvchr>, C<isALPHA_utf8>,
|
|
C<isALPHA_utf8_safe>, C<isALPHA_LC>, C<isALPHA_LC_uvchr>, C<isALPHA_LC_utf8>,
|
|
and C<isALPHA_LC_utf8_safe>.
|
|
|
|
bool isALPHA(int ch)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item isALPHANUMERIC
|
|
X<isALPHANUMERIC>
|
|
|
|
Returns a boolean indicating whether the specified character is one of
|
|
C<[A-Za-z0-9]>, analogous to C<m/[[:alnum:]]/>.
|
|
See the L<top of this section|/Character classification> for an explanation of
|
|
variants
|
|
C<isALPHANUMERIC_A>, C<isALPHANUMERIC_L1>, C<isALPHANUMERIC_uvchr>,
|
|
C<isALPHANUMERIC_utf8>, C<isALPHANUMERIC_utf8_safe>, C<isALPHANUMERIC_LC>,
|
|
C<isALPHANUMERIC_LC_uvchr>, C<isALPHANUMERIC_LC_utf8>, and
|
|
C<isALPHANUMERIC_LC_utf8_safe>.
|
|
|
|
A (discouraged from use) synonym is C<isALNUMC> (where the C<C> suffix means
|
|
this corresponds to the C language alphanumeric definition). Also
|
|
there are the variants
|
|
C<isALNUMC_A>, C<isALNUMC_L1>
|
|
C<isALNUMC_LC>, and C<isALNUMC_LC_uvchr>.
|
|
|
|
bool isALPHANUMERIC(int ch)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item isASCII
|
|
X<isASCII>
|
|
|
|
Returns a boolean indicating whether the specified character is one of the 128
|
|
characters in the ASCII character set, analogous to C<m/[[:ascii:]]/>.
|
|
On non-ASCII platforms, it returns TRUE iff this
|
|
character corresponds to an ASCII character. Variants C<isASCII_A()> and
|
|
C<isASCII_L1()> are identical to C<isASCII()>.
|
|
See the L<top of this section|/Character classification> for an explanation of
|
|
variants
|
|
C<isASCII_uvchr>, C<isASCII_utf8>, C<isASCII_utf8_safe>, C<isASCII_LC>,
|
|
C<isASCII_LC_uvchr>, C<isASCII_LC_utf8>, and C<isASCII_LC_utf8_safe>.
|
|
Note, however, that some platforms do not have the C library routine
|
|
C<isascii()>. In these cases, the variants whose names contain C<LC> are the
|
|
same as the corresponding ones without.
|
|
|
|
bool isASCII(int ch)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item isBLANK
|
|
X<isBLANK>
|
|
|
|
Returns a boolean indicating whether the specified character is a
|
|
character considered to be a blank, analogous to C<m/[[:blank:]]/>.
|
|
See the L<top of this section|/Character classification> for an explanation of
|
|
variants
|
|
C<isBLANK_A>, C<isBLANK_L1>, C<isBLANK_uvchr>, C<isBLANK_utf8>,
|
|
C<isBLANK_utf8_safe>, C<isBLANK_LC>, C<isBLANK_LC_uvchr>, C<isBLANK_LC_utf8>,
|
|
and C<isBLANK_LC_utf8_safe>. Note,
|
|
however, that some platforms do not have the C library routine
|
|
C<isblank()>. In these cases, the variants whose names contain C<LC> are
|
|
the same as the corresponding ones without.
|
|
|
|
bool isBLANK(char ch)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item isCNTRL
|
|
X<isCNTRL>
|
|
|
|
Returns a boolean indicating whether the specified character is a
|
|
control character, analogous to C<m/[[:cntrl:]]/>.
|
|
See the L<top of this section|/Character classification> for an explanation of
|
|
variants
|
|
C<isCNTRL_A>, C<isCNTRL_L1>, C<isCNTRL_uvchr>, C<isCNTRL_utf8>,
|
|
C<isCNTRL_utf8_safe>, C<isCNTRL_LC>, C<isCNTRL_LC_uvchr>, C<isCNTRL_LC_utf8>
|
|
and C<isCNTRL_LC_utf8_safe>. On EBCDIC
|
|
platforms, you almost always want to use the C<isCNTRL_L1> variant.
|
|
|
|
bool isCNTRL(char ch)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item isDIGIT
|
|
X<isDIGIT>
|
|
|
|
Returns a boolean indicating whether the specified character is a
|
|
digit, analogous to C<m/[[:digit:]]/>.
|
|
Variants C<isDIGIT_A> and C<isDIGIT_L1> are identical to C<isDIGIT>.
|
|
See the L<top of this section|/Character classification> for an explanation of
|
|
variants
|
|
C<isDIGIT_uvchr>, C<isDIGIT_utf8>, C<isDIGIT_utf8_safe>, C<isDIGIT_LC>,
|
|
C<isDIGIT_LC_uvchr>, C<isDIGIT_LC_utf8>, and C<isDIGIT_LC_utf8_safe>.
|
|
|
|
bool isDIGIT(char ch)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item isGRAPH
|
|
X<isGRAPH>
|
|
|
|
Returns a boolean indicating whether the specified character is a
|
|
graphic character, analogous to C<m/[[:graph:]]/>.
|
|
See the L<top of this section|/Character classification> for an explanation of
|
|
variants C<isGRAPH_A>, C<isGRAPH_L1>, C<isGRAPH_uvchr>, C<isGRAPH_utf8>,
|
|
C<isGRAPH_utf8_safe>, C<isGRAPH_LC>, C<isGRAPH_LC_uvchr>,
|
|
C<isGRAPH_LC_utf8_safe>, and C<isGRAPH_LC_utf8_safe>.
|
|
|
|
bool isGRAPH(char ch)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item isIDCONT
|
|
X<isIDCONT>
|
|
|
|
Returns a boolean indicating whether the specified character can be the
|
|
second or succeeding character of an identifier. This is very close to, but
|
|
not quite the same as the official Unicode property C<XID_Continue>. The
|
|
difference is that this returns true only if the input character also matches
|
|
L</isWORDCHAR>. See the L<top of this section|/Character classification> for
|
|
an explanation of variants C<isIDCONT_A>, C<isIDCONT_L1>, C<isIDCONT_uvchr>,
|
|
C<isIDCONT_utf8>, C<isIDCONT_utf8_safe>, C<isIDCONT_LC>, C<isIDCONT_LC_uvchr>,
|
|
C<isIDCONT_LC_utf8>, and C<isIDCONT_LC_utf8_safe>.
|
|
|
|
bool isIDCONT(char ch)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item isIDFIRST
|
|
X<isIDFIRST>
|
|
|
|
Returns a boolean indicating whether the specified character can be the first
|
|
character of an identifier. This is very close to, but not quite the same as
|
|
the official Unicode property C<XID_Start>. The difference is that this
|
|
returns true only if the input character also matches L</isWORDCHAR>.
|
|
See the L<top of this section|/Character classification> for an explanation of
|
|
variants
|
|
C<isIDFIRST_A>, C<isIDFIRST_L1>, C<isIDFIRST_uvchr>, C<isIDFIRST_utf8>,
|
|
C<isIDFIRST_utf8_safe>, C<isIDFIRST_LC>, C<isIDFIRST_LC_uvchr>,
|
|
C<isIDFIRST_LC_utf8>, and C<isIDFIRST_LC_utf8_safe>.
|
|
|
|
bool isIDFIRST(char ch)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item isLOWER
|
|
X<isLOWER>
|
|
|
|
Returns a boolean indicating whether the specified character is a
|
|
lowercase character, analogous to C<m/[[:lower:]]/>.
|
|
See the L<top of this section|/Character classification> for an explanation of
|
|
variants
|
|
C<isLOWER_A>, C<isLOWER_L1>, C<isLOWER_uvchr>, C<isLOWER_utf8>,
|
|
C<isLOWER_utf8_safe>, C<isLOWER_LC>, C<isLOWER_LC_uvchr>, C<isLOWER_LC_utf8>,
|
|
and C<isLOWER_LC_utf8_safe>.
|
|
|
|
bool isLOWER(char ch)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item isOCTAL
|
|
X<isOCTAL>
|
|
|
|
Returns a boolean indicating whether the specified character is an
|
|
octal digit, [0-7].
|
|
The only two variants are C<isOCTAL_A> and C<isOCTAL_L1>; each is identical to
|
|
C<isOCTAL>.
|
|
|
|
bool isOCTAL(char ch)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item isPRINT
|
|
X<isPRINT>
|
|
|
|
Returns a boolean indicating whether the specified character is a
|
|
printable character, analogous to C<m/[[:print:]]/>.
|
|
See the L<top of this section|/Character classification> for an explanation of
|
|
variants
|
|
C<isPRINT_A>, C<isPRINT_L1>, C<isPRINT_uvchr>, C<isPRINT_utf8>,
|
|
C<isPRINT_utf8_safe>, C<isPRINT_LC>, C<isPRINT_LC_uvchr>, C<isPRINT_LC_utf8>,
|
|
and C<isPRINT_LC_utf8_safe>.
|
|
|
|
bool isPRINT(char ch)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item isPSXSPC
|
|
X<isPSXSPC>
|
|
|
|
(short for Posix Space)
|
|
Starting in 5.18, this is identical in all its forms to the
|
|
corresponding C<isSPACE()> macros.
|
|
The locale forms of this macro are identical to their corresponding
|
|
C<isSPACE()> forms in all Perl releases. In releases prior to 5.18, the
|
|
non-locale forms differ from their C<isSPACE()> forms only in that the
|
|
C<isSPACE()> forms don't match a Vertical Tab, and the C<isPSXSPC()> forms do.
|
|
Otherwise they are identical. Thus this macro is analogous to what
|
|
C<m/[[:space:]]/> matches in a regular expression.
|
|
See the L<top of this section|/Character classification> for an explanation of
|
|
variants C<isPSXSPC_A>, C<isPSXSPC_L1>, C<isPSXSPC_uvchr>, C<isPSXSPC_utf8>,
|
|
C<isPSXSPC_utf8_safe>, C<isPSXSPC_LC>, C<isPSXSPC_LC_uvchr>,
|
|
C<isPSXSPC_LC_utf8>, and C<isPSXSPC_LC_utf8_safe>.
|
|
|
|
bool isPSXSPC(char ch)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item isPUNCT
|
|
X<isPUNCT>
|
|
|
|
Returns a boolean indicating whether the specified character is a
|
|
punctuation character, analogous to C<m/[[:punct:]]/>.
|
|
Note that the definition of what is punctuation isn't as
|
|
straightforward as one might desire. See L<perlrecharclass/POSIX Character
|
|
Classes> for details.
|
|
See the L<top of this section|/Character classification> for an explanation of
|
|
variants C<isPUNCT_A>, C<isPUNCT_L1>, C<isPUNCT_uvchr>, C<isPUNCT_utf8>,
|
|
C<isPUNCT_utf8_safe>, C<isPUNCT_LC>, C<isPUNCT_LC_uvchr>, C<isPUNCT_LC_utf8>,
|
|
and C<isPUNCT_LC_utf8_safe>.
|
|
|
|
bool isPUNCT(char ch)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item isSPACE
|
|
X<isSPACE>
|
|
|
|
Returns a boolean indicating whether the specified character is a
|
|
whitespace character. This is analogous
|
|
to what C<m/\s/> matches in a regular expression. Starting in Perl 5.18
|
|
this also matches what C<m/[[:space:]]/> does. Prior to 5.18, only the
|
|
locale forms of this macro (the ones with C<LC> in their names) matched
|
|
precisely what C<m/[[:space:]]/> does. In those releases, the only difference,
|
|
in the non-locale variants, was that C<isSPACE()> did not match a vertical tab.
|
|
(See L</isPSXSPC> for a macro that matches a vertical tab in all releases.)
|
|
See the L<top of this section|/Character classification> for an explanation of
|
|
variants
|
|
C<isSPACE_A>, C<isSPACE_L1>, C<isSPACE_uvchr>, C<isSPACE_utf8>,
|
|
C<isSPACE_utf8_safe>, C<isSPACE_LC>, C<isSPACE_LC_uvchr>, C<isSPACE_LC_utf8>,
|
|
and C<isSPACE_LC_utf8_safe>.
|
|
|
|
bool isSPACE(char ch)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item isUPPER
|
|
X<isUPPER>
|
|
|
|
Returns a boolean indicating whether the specified character is an
|
|
uppercase character, analogous to C<m/[[:upper:]]/>.
|
|
See the L<top of this section|/Character classification> for an explanation of
|
|
variants C<isUPPER_A>, C<isUPPER_L1>, C<isUPPER_uvchr>, C<isUPPER_utf8>,
|
|
C<isUPPER_utf8_safe>, C<isUPPER_LC>, C<isUPPER_LC_uvchr>, C<isUPPER_LC_utf8>,
|
|
and C<isUPPER_LC_utf8_safe>.
|
|
|
|
bool isUPPER(char ch)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item isWORDCHAR
|
|
X<isWORDCHAR>
|
|
|
|
Returns a boolean indicating whether the specified character is a character
|
|
that is a word character, analogous to what C<m/\w/> and C<m/[[:word:]]/> match
|
|
in a regular expression. A word character is an alphabetic character, a
|
|
decimal digit, a connecting punctuation character (such as an underscore), or
|
|
a "mark" character that attaches to one of those (like some sort of accent).
|
|
C<isALNUM()> is a synonym provided for backward compatibility, even though a
|
|
word character includes more than the standard C language meaning of
|
|
alphanumeric.
|
|
See the L<top of this section|/Character classification> for an explanation of
|
|
variants C<isWORDCHAR_A>, C<isWORDCHAR_L1>, C<isWORDCHAR_uvchr>,
|
|
C<isWORDCHAR_utf8>, and C<isWORDCHAR_utf8_safe>. C<isWORDCHAR_LC>,
|
|
C<isWORDCHAR_LC_uvchr>, C<isWORDCHAR_LC_utf8>, and C<isWORDCHAR_LC_utf8_safe>
|
|
are also as described there, but additionally include the platform's native
|
|
underscore.
|
|
|
|
bool isWORDCHAR(char ch)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item isXDIGIT
|
|
X<isXDIGIT>
|
|
|
|
Returns a boolean indicating whether the specified character is a hexadecimal
|
|
digit. In the ASCII range these are C<[0-9A-Fa-f]>. Variants C<isXDIGIT_A()>
|
|
and C<isXDIGIT_L1()> are identical to C<isXDIGIT()>.
|
|
See the L<top of this section|/Character classification> for an explanation of
|
|
variants
|
|
C<isXDIGIT_uvchr>, C<isXDIGIT_utf8>, C<isXDIGIT_utf8_safe>, C<isXDIGIT_LC>,
|
|
C<isXDIGIT_LC_uvchr>, C<isXDIGIT_LC_utf8>, and C<isXDIGIT_LC_utf8_safe>.
|
|
|
|
bool isXDIGIT(char ch)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
|
|
=back
|
|
|
|
=head1 Cloning an interpreter
|
|
|
|
=over 8
|
|
|
|
=item perl_clone
|
|
X<perl_clone>
|
|
|
|
Create and return a new interpreter by cloning the current one.
|
|
|
|
C<perl_clone> takes these flags as parameters:
|
|
|
|
C<CLONEf_COPY_STACKS> - is used to, well, copy the stacks also,
|
|
without it we only clone the data and zero the stacks,
|
|
with it we copy the stacks and the new perl interpreter is
|
|
ready to run at the exact same point as the previous one.
|
|
The pseudo-fork code uses C<COPY_STACKS> while the
|
|
threads->create doesn't.
|
|
|
|
C<CLONEf_KEEP_PTR_TABLE> -
|
|
C<perl_clone> keeps a ptr_table with the pointer of the old
|
|
variable as a key and the new variable as a value,
|
|
this allows it to check if something has been cloned and not
|
|
clone it again, but rather just use the value and increase the
|
|
refcount.
|
|
If C<KEEP_PTR_TABLE> is not set then C<perl_clone> will kill the ptr_table
|
|
using the function S<C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>>.
|
|
A reason to keep it around is if you want to dup some of your own
|
|
variables which are outside the graph that perl scans.
|
|
|
|
C<CLONEf_CLONE_HOST> -
|
|
This is a win32 thing, it is ignored on unix, it tells perl's
|
|
win32host code (which is c++) to clone itself, this is needed on
|
|
win32 if you want to run two threads at the same time,
|
|
if you just want to do some stuff in a separate perl interpreter
|
|
and then throw it away and return to the original one,
|
|
you don't need to do anything.
|
|
|
|
PerlInterpreter* perl_clone(
|
|
PerlInterpreter *proto_perl,
|
|
UV flags
|
|
)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
|
|
=back
|
|
|
|
=head1 Compile-time scope hooks
|
|
|
|
=over 8
|
|
|
|
=item BhkDISABLE
|
|
X<BhkDISABLE>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Temporarily disable an entry in this BHK structure, by clearing the
|
|
appropriate flag. C<which> is a preprocessor token indicating which
|
|
entry to disable.
|
|
|
|
void BhkDISABLE(BHK *hk, which)
|
|
|
|
=for hackers
|
|
Found in file op.h
|
|
|
|
=item BhkENABLE
|
|
X<BhkENABLE>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Re-enable an entry in this BHK structure, by setting the appropriate
|
|
flag. C<which> is a preprocessor token indicating which entry to enable.
|
|
This will assert (under -DDEBUGGING) if the entry doesn't contain a valid
|
|
pointer.
|
|
|
|
void BhkENABLE(BHK *hk, which)
|
|
|
|
=for hackers
|
|
Found in file op.h
|
|
|
|
=item BhkENTRY_set
|
|
X<BhkENTRY_set>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Set an entry in the BHK structure, and set the flags to indicate it is
|
|
valid. C<which> is a preprocessing token indicating which entry to set.
|
|
The type of C<ptr> depends on the entry.
|
|
|
|
void BhkENTRY_set(BHK *hk, which, void *ptr)
|
|
|
|
=for hackers
|
|
Found in file op.h
|
|
|
|
=item blockhook_register
|
|
X<blockhook_register>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Register a set of hooks to be called when the Perl lexical scope changes
|
|
at compile time. See L<perlguts/"Compile-time scope hooks">.
|
|
|
|
NOTE: this function must be explicitly called as Perl_blockhook_register with an aTHX_ parameter.
|
|
|
|
void Perl_blockhook_register(pTHX_ BHK *hk)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
|
|
=back
|
|
|
|
=head1 COP Hint Hashes
|
|
|
|
=over 8
|
|
|
|
=item cophh_2hv
|
|
X<cophh_2hv>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Generates and returns a standard Perl hash representing the full set of
|
|
key/value pairs in the cop hints hash C<cophh>. C<flags> is currently
|
|
unused and must be zero.
|
|
|
|
HV * cophh_2hv(const COPHH *cophh, U32 flags)
|
|
|
|
=for hackers
|
|
Found in file cop.h
|
|
|
|
=item cophh_copy
|
|
X<cophh_copy>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Make and return a complete copy of the cop hints hash C<cophh>.
|
|
|
|
COPHH * cophh_copy(COPHH *cophh)
|
|
|
|
=for hackers
|
|
Found in file cop.h
|
|
|
|
=item cophh_delete_pv
|
|
X<cophh_delete_pv>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Like L</cophh_delete_pvn>, but takes a nul-terminated string instead of
|
|
a string/length pair.
|
|
|
|
COPHH * cophh_delete_pv(const COPHH *cophh,
|
|
const char *key, U32 hash,
|
|
U32 flags)
|
|
|
|
=for hackers
|
|
Found in file cop.h
|
|
|
|
=item cophh_delete_pvn
|
|
X<cophh_delete_pvn>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Delete a key and its associated value from the cop hints hash C<cophh>,
|
|
and returns the modified hash. The returned hash pointer is in general
|
|
not the same as the hash pointer that was passed in. The input hash is
|
|
consumed by the function, and the pointer to it must not be subsequently
|
|
used. Use L</cophh_copy> if you need both hashes.
|
|
|
|
The key is specified by C<keypv> and C<keylen>. If C<flags> has the
|
|
C<COPHH_KEY_UTF8> bit set, the key octets are interpreted as UTF-8,
|
|
otherwise they are interpreted as Latin-1. C<hash> is a precomputed
|
|
hash of the key string, or zero if it has not been precomputed.
|
|
|
|
COPHH * cophh_delete_pvn(COPHH *cophh,
|
|
const char *keypv,
|
|
STRLEN keylen, U32 hash,
|
|
U32 flags)
|
|
|
|
=for hackers
|
|
Found in file cop.h
|
|
|
|
=item cophh_delete_pvs
|
|
X<cophh_delete_pvs>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Like L</cophh_delete_pvn>, but takes a literal string instead
|
|
of a string/length pair, and no precomputed hash.
|
|
|
|
COPHH * cophh_delete_pvs(const COPHH *cophh, "key",
|
|
U32 flags)
|
|
|
|
=for hackers
|
|
Found in file cop.h
|
|
|
|
=item cophh_delete_sv
|
|
X<cophh_delete_sv>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Like L</cophh_delete_pvn>, but takes a Perl scalar instead of a
|
|
string/length pair.
|
|
|
|
COPHH * cophh_delete_sv(const COPHH *cophh, SV *key,
|
|
U32 hash, U32 flags)
|
|
|
|
=for hackers
|
|
Found in file cop.h
|
|
|
|
=item cophh_fetch_pv
|
|
X<cophh_fetch_pv>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Like L</cophh_fetch_pvn>, but takes a nul-terminated string instead of
|
|
a string/length pair.
|
|
|
|
SV * cophh_fetch_pv(const COPHH *cophh,
|
|
const char *key, U32 hash,
|
|
U32 flags)
|
|
|
|
=for hackers
|
|
Found in file cop.h
|
|
|
|
=item cophh_fetch_pvn
|
|
X<cophh_fetch_pvn>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Look up the entry in the cop hints hash C<cophh> with the key specified by
|
|
C<keypv> and C<keylen>. If C<flags> has the C<COPHH_KEY_UTF8> bit set,
|
|
the key octets are interpreted as UTF-8, otherwise they are interpreted
|
|
as Latin-1. C<hash> is a precomputed hash of the key string, or zero if
|
|
it has not been precomputed. Returns a mortal scalar copy of the value
|
|
associated with the key, or C<&PL_sv_placeholder> if there is no value
|
|
associated with the key.
|
|
|
|
SV * cophh_fetch_pvn(const COPHH *cophh,
|
|
const char *keypv,
|
|
STRLEN keylen, U32 hash,
|
|
U32 flags)
|
|
|
|
=for hackers
|
|
Found in file cop.h
|
|
|
|
=item cophh_fetch_pvs
|
|
X<cophh_fetch_pvs>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Like L</cophh_fetch_pvn>, but takes a literal string instead
|
|
of a string/length pair, and no precomputed hash.
|
|
|
|
SV * cophh_fetch_pvs(const COPHH *cophh, "key",
|
|
U32 flags)
|
|
|
|
=for hackers
|
|
Found in file cop.h
|
|
|
|
=item cophh_fetch_sv
|
|
X<cophh_fetch_sv>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Like L</cophh_fetch_pvn>, but takes a Perl scalar instead of a
|
|
string/length pair.
|
|
|
|
SV * cophh_fetch_sv(const COPHH *cophh, SV *key,
|
|
U32 hash, U32 flags)
|
|
|
|
=for hackers
|
|
Found in file cop.h
|
|
|
|
=item cophh_free
|
|
X<cophh_free>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Discard the cop hints hash C<cophh>, freeing all resources associated
|
|
with it.
|
|
|
|
void cophh_free(COPHH *cophh)
|
|
|
|
=for hackers
|
|
Found in file cop.h
|
|
|
|
=item cophh_new_empty
|
|
X<cophh_new_empty>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Generate and return a fresh cop hints hash containing no entries.
|
|
|
|
COPHH * cophh_new_empty()
|
|
|
|
=for hackers
|
|
Found in file cop.h
|
|
|
|
=item cophh_store_pv
|
|
X<cophh_store_pv>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Like L</cophh_store_pvn>, but takes a nul-terminated string instead of
|
|
a string/length pair.
|
|
|
|
COPHH * cophh_store_pv(const COPHH *cophh,
|
|
const char *key, U32 hash,
|
|
SV *value, U32 flags)
|
|
|
|
=for hackers
|
|
Found in file cop.h
|
|
|
|
=item cophh_store_pvn
|
|
X<cophh_store_pvn>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Stores a value, associated with a key, in the cop hints hash C<cophh>,
|
|
and returns the modified hash. The returned hash pointer is in general
|
|
not the same as the hash pointer that was passed in. The input hash is
|
|
consumed by the function, and the pointer to it must not be subsequently
|
|
used. Use L</cophh_copy> if you need both hashes.
|
|
|
|
The key is specified by C<keypv> and C<keylen>. If C<flags> has the
|
|
C<COPHH_KEY_UTF8> bit set, the key octets are interpreted as UTF-8,
|
|
otherwise they are interpreted as Latin-1. C<hash> is a precomputed
|
|
hash of the key string, or zero if it has not been precomputed.
|
|
|
|
C<value> is the scalar value to store for this key. C<value> is copied
|
|
by this function, which thus does not take ownership of any reference
|
|
to it, and later changes to the scalar will not be reflected in the
|
|
value visible in the cop hints hash. Complex types of scalar will not
|
|
be stored with referential integrity, but will be coerced to strings.
|
|
|
|
COPHH * cophh_store_pvn(COPHH *cophh, const char *keypv,
|
|
STRLEN keylen, U32 hash,
|
|
SV *value, U32 flags)
|
|
|
|
=for hackers
|
|
Found in file cop.h
|
|
|
|
=item cophh_store_pvs
|
|
X<cophh_store_pvs>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Like L</cophh_store_pvn>, but takes a literal string instead
|
|
of a string/length pair, and no precomputed hash.
|
|
|
|
COPHH * cophh_store_pvs(const COPHH *cophh, "key",
|
|
SV *value, U32 flags)
|
|
|
|
=for hackers
|
|
Found in file cop.h
|
|
|
|
=item cophh_store_sv
|
|
X<cophh_store_sv>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Like L</cophh_store_pvn>, but takes a Perl scalar instead of a
|
|
string/length pair.
|
|
|
|
COPHH * cophh_store_sv(const COPHH *cophh, SV *key,
|
|
U32 hash, SV *value, U32 flags)
|
|
|
|
=for hackers
|
|
Found in file cop.h
|
|
|
|
|
|
=back
|
|
|
|
=head1 COP Hint Reading
|
|
|
|
=over 8
|
|
|
|
=item cop_hints_2hv
|
|
X<cop_hints_2hv>
|
|
|
|
Generates and returns a standard Perl hash representing the full set of
|
|
hint entries in the cop C<cop>. C<flags> is currently unused and must
|
|
be zero.
|
|
|
|
HV * cop_hints_2hv(const COP *cop, U32 flags)
|
|
|
|
=for hackers
|
|
Found in file cop.h
|
|
|
|
=item cop_hints_fetch_pv
|
|
X<cop_hints_fetch_pv>
|
|
|
|
Like L</cop_hints_fetch_pvn>, but takes a nul-terminated string instead
|
|
of a string/length pair.
|
|
|
|
SV * cop_hints_fetch_pv(const COP *cop,
|
|
const char *key, U32 hash,
|
|
U32 flags)
|
|
|
|
=for hackers
|
|
Found in file cop.h
|
|
|
|
=item cop_hints_fetch_pvn
|
|
X<cop_hints_fetch_pvn>
|
|
|
|
Look up the hint entry in the cop C<cop> with the key specified by
|
|
C<keypv> and C<keylen>. If C<flags> has the C<COPHH_KEY_UTF8> bit set,
|
|
the key octets are interpreted as UTF-8, otherwise they are interpreted
|
|
as Latin-1. C<hash> is a precomputed hash of the key string, or zero if
|
|
it has not been precomputed. Returns a mortal scalar copy of the value
|
|
associated with the key, or C<&PL_sv_placeholder> if there is no value
|
|
associated with the key.
|
|
|
|
SV * cop_hints_fetch_pvn(const COP *cop,
|
|
const char *keypv,
|
|
STRLEN keylen, U32 hash,
|
|
U32 flags)
|
|
|
|
=for hackers
|
|
Found in file cop.h
|
|
|
|
=item cop_hints_fetch_pvs
|
|
X<cop_hints_fetch_pvs>
|
|
|
|
Like L</cop_hints_fetch_pvn>, but takes a literal string
|
|
instead of a string/length pair, and no precomputed hash.
|
|
|
|
SV * cop_hints_fetch_pvs(const COP *cop, "key",
|
|
U32 flags)
|
|
|
|
=for hackers
|
|
Found in file cop.h
|
|
|
|
=item cop_hints_fetch_sv
|
|
X<cop_hints_fetch_sv>
|
|
|
|
Like L</cop_hints_fetch_pvn>, but takes a Perl scalar instead of a
|
|
string/length pair.
|
|
|
|
SV * cop_hints_fetch_sv(const COP *cop, SV *key,
|
|
U32 hash, U32 flags)
|
|
|
|
=for hackers
|
|
Found in file cop.h
|
|
|
|
=item CopLABEL
|
|
X<CopLABEL>
|
|
|
|
Returns the label attached to a cop.
|
|
|
|
const char * CopLABEL(COP *const cop)
|
|
|
|
=for hackers
|
|
Found in file cop.h
|
|
|
|
=item CopLABEL_len
|
|
X<CopLABEL_len>
|
|
|
|
Returns the label attached to a cop, and stores its length in bytes into
|
|
C<*len>.
|
|
|
|
const char * CopLABEL_len(COP *const cop, STRLEN *len)
|
|
|
|
=for hackers
|
|
Found in file cop.h
|
|
|
|
=item CopLABEL_len_flags
|
|
X<CopLABEL_len_flags>
|
|
|
|
Returns the label attached to a cop, and stores its length in bytes into
|
|
C<*len>. Upon return, C<*flags> will be set to either C<SVf_UTF8> or 0.
|
|
|
|
const char * CopLABEL_len_flags(COP *const cop,
|
|
STRLEN *len, U32 *flags)
|
|
|
|
=for hackers
|
|
Found in file cop.h
|
|
|
|
|
|
=back
|
|
|
|
=head1 Custom Operators
|
|
|
|
=over 8
|
|
|
|
=item custom_op_register
|
|
X<custom_op_register>
|
|
|
|
Register a custom op. See L<perlguts/"Custom Operators">.
|
|
|
|
NOTE: this function must be explicitly called as Perl_custom_op_register with an aTHX_ parameter.
|
|
|
|
void Perl_custom_op_register(pTHX_
|
|
Perl_ppaddr_t ppaddr,
|
|
const XOP *xop)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item Perl_custom_op_xop
|
|
X<Perl_custom_op_xop>
|
|
|
|
Return the XOP structure for a given custom op. This macro should be
|
|
considered internal to C<OP_NAME> and the other access macros: use them instead.
|
|
This macro does call a function. Prior
|
|
to 5.19.6, this was implemented as a
|
|
function.
|
|
|
|
const XOP * Perl_custom_op_xop(pTHX_ const OP *o)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item XopDISABLE
|
|
X<XopDISABLE>
|
|
|
|
Temporarily disable a member of the XOP, by clearing the appropriate flag.
|
|
|
|
void XopDISABLE(XOP *xop, which)
|
|
|
|
=for hackers
|
|
Found in file op.h
|
|
|
|
=item XopENABLE
|
|
X<XopENABLE>
|
|
|
|
Reenable a member of the XOP which has been disabled.
|
|
|
|
void XopENABLE(XOP *xop, which)
|
|
|
|
=for hackers
|
|
Found in file op.h
|
|
|
|
=item XopENTRY
|
|
X<XopENTRY>
|
|
|
|
Return a member of the XOP structure. C<which> is a cpp token
|
|
indicating which entry to return. If the member is not set
|
|
this will return a default value. The return type depends
|
|
on C<which>. This macro evaluates its arguments more than
|
|
once. If you are using C<Perl_custom_op_xop> to retreive a
|
|
C<XOP *> from a C<OP *>, use the more efficient L</XopENTRYCUSTOM> instead.
|
|
|
|
XopENTRY(XOP *xop, which)
|
|
|
|
=for hackers
|
|
Found in file op.h
|
|
|
|
=item XopENTRYCUSTOM
|
|
X<XopENTRYCUSTOM>
|
|
|
|
Exactly like C<XopENTRY(XopENTRY(Perl_custom_op_xop(aTHX_ o), which)> but more
|
|
efficient. The C<which> parameter is identical to L</XopENTRY>.
|
|
|
|
XopENTRYCUSTOM(const OP *o, which)
|
|
|
|
=for hackers
|
|
Found in file op.h
|
|
|
|
=item XopENTRY_set
|
|
X<XopENTRY_set>
|
|
|
|
Set a member of the XOP structure. C<which> is a cpp token
|
|
indicating which entry to set. See L<perlguts/"Custom Operators">
|
|
for details about the available members and how
|
|
they are used. This macro evaluates its argument
|
|
more than once.
|
|
|
|
void XopENTRY_set(XOP *xop, which, value)
|
|
|
|
=for hackers
|
|
Found in file op.h
|
|
|
|
=item XopFLAGS
|
|
X<XopFLAGS>
|
|
|
|
Return the XOP's flags.
|
|
|
|
U32 XopFLAGS(XOP *xop)
|
|
|
|
=for hackers
|
|
Found in file op.h
|
|
|
|
|
|
=back
|
|
|
|
=head1 CV Manipulation Functions
|
|
|
|
This section documents functions to manipulate CVs which are code-values,
|
|
or subroutines. For more information, see L<perlguts>.
|
|
|
|
|
|
=over 8
|
|
|
|
=item caller_cx
|
|
X<caller_cx>
|
|
|
|
The XSUB-writer's equivalent of L<caller()|perlfunc/caller>. The
|
|
returned C<PERL_CONTEXT> structure can be interrogated to find all the
|
|
information returned to Perl by C<caller>. Note that XSUBs don't get a
|
|
stack frame, so C<caller_cx(0, NULL)> will return information for the
|
|
immediately-surrounding Perl code.
|
|
|
|
This function skips over the automatic calls to C<&DB::sub> made on the
|
|
behalf of the debugger. If the stack frame requested was a sub called by
|
|
C<DB::sub>, the return value will be the frame for the call to
|
|
C<DB::sub>, since that has the correct line number/etc. for the call
|
|
site. If I<dbcxp> is non-C<NULL>, it will be set to a pointer to the
|
|
frame for the sub call itself.
|
|
|
|
const PERL_CONTEXT * caller_cx(
|
|
I32 level,
|
|
const PERL_CONTEXT **dbcxp
|
|
)
|
|
|
|
=for hackers
|
|
Found in file pp_ctl.c
|
|
|
|
=item CvSTASH
|
|
X<CvSTASH>
|
|
|
|
Returns the stash of the CV. A stash is the symbol table hash, containing
|
|
the package-scoped variables in the package where the subroutine was defined.
|
|
For more information, see L<perlguts>.
|
|
|
|
This also has a special use with XS AUTOLOAD subs.
|
|
See L<perlguts/Autoloading with XSUBs>.
|
|
|
|
HV* CvSTASH(CV* cv)
|
|
|
|
=for hackers
|
|
Found in file cv.h
|
|
|
|
=item find_runcv
|
|
X<find_runcv>
|
|
|
|
Locate the CV corresponding to the currently executing sub or eval.
|
|
If C<db_seqp> is non_null, skip CVs that are in the DB package and populate
|
|
C<*db_seqp> with the cop sequence number at the point that the DB:: code was
|
|
entered. (This allows debuggers to eval in the scope of the breakpoint
|
|
rather than in the scope of the debugger itself.)
|
|
|
|
CV* find_runcv(U32 *db_seqp)
|
|
|
|
=for hackers
|
|
Found in file pp_ctl.c
|
|
|
|
=item get_cv
|
|
X<get_cv>
|
|
|
|
Uses C<strlen> to get the length of C<name>, then calls C<get_cvn_flags>.
|
|
|
|
NOTE: the perl_ form of this function is deprecated.
|
|
|
|
CV* get_cv(const char* name, I32 flags)
|
|
|
|
=for hackers
|
|
Found in file perl.c
|
|
|
|
=item get_cvn_flags
|
|
X<get_cvn_flags>
|
|
|
|
Returns the CV of the specified Perl subroutine. C<flags> are passed to
|
|
C<gv_fetchpvn_flags>. If C<GV_ADD> is set and the Perl subroutine does not
|
|
exist then it will be declared (which has the same effect as saying
|
|
C<sub name;>). If C<GV_ADD> is not set and the subroutine does not exist
|
|
then NULL is returned.
|
|
|
|
CV* get_cvn_flags(const char* name, STRLEN len,
|
|
I32 flags)
|
|
|
|
=for hackers
|
|
Found in file perl.c
|
|
|
|
|
|
=back
|
|
|
|
=head1 C<xsubpp> variables and internal functions
|
|
|
|
=over 8
|
|
|
|
=item ax
|
|
X<ax>
|
|
|
|
Variable which is setup by C<xsubpp> to indicate the stack base offset,
|
|
used by the C<ST>, C<XSprePUSH> and C<XSRETURN> macros. The C<dMARK> macro
|
|
must be called prior to setup the C<MARK> variable.
|
|
|
|
I32 ax
|
|
|
|
=for hackers
|
|
Found in file XSUB.h
|
|
|
|
=item CLASS
|
|
X<CLASS>
|
|
|
|
Variable which is setup by C<xsubpp> to indicate the
|
|
class name for a C++ XS constructor. This is always a C<char*>. See
|
|
C<L</THIS>>.
|
|
|
|
char* CLASS
|
|
|
|
=for hackers
|
|
Found in file XSUB.h
|
|
|
|
=item dAX
|
|
X<dAX>
|
|
|
|
Sets up the C<ax> variable.
|
|
This is usually handled automatically by C<xsubpp> by calling C<dXSARGS>.
|
|
|
|
dAX;
|
|
|
|
=for hackers
|
|
Found in file XSUB.h
|
|
|
|
=item dAXMARK
|
|
X<dAXMARK>
|
|
|
|
Sets up the C<ax> variable and stack marker variable C<mark>.
|
|
This is usually handled automatically by C<xsubpp> by calling C<dXSARGS>.
|
|
|
|
dAXMARK;
|
|
|
|
=for hackers
|
|
Found in file XSUB.h
|
|
|
|
=item dITEMS
|
|
X<dITEMS>
|
|
|
|
Sets up the C<items> variable.
|
|
This is usually handled automatically by C<xsubpp> by calling C<dXSARGS>.
|
|
|
|
dITEMS;
|
|
|
|
=for hackers
|
|
Found in file XSUB.h
|
|
|
|
=item dUNDERBAR
|
|
X<dUNDERBAR>
|
|
|
|
Sets up any variable needed by the C<UNDERBAR> macro. It used to define
|
|
C<padoff_du>, but it is currently a noop. However, it is strongly advised
|
|
to still use it for ensuring past and future compatibility.
|
|
|
|
dUNDERBAR;
|
|
|
|
=for hackers
|
|
Found in file XSUB.h
|
|
|
|
=item dXSARGS
|
|
X<dXSARGS>
|
|
|
|
Sets up stack and mark pointers for an XSUB, calling C<dSP> and C<dMARK>.
|
|
Sets up the C<ax> and C<items> variables by calling C<dAX> and C<dITEMS>.
|
|
This is usually handled automatically by C<xsubpp>.
|
|
|
|
dXSARGS;
|
|
|
|
=for hackers
|
|
Found in file XSUB.h
|
|
|
|
=item dXSI32
|
|
X<dXSI32>
|
|
|
|
Sets up the C<ix> variable for an XSUB which has aliases. This is usually
|
|
handled automatically by C<xsubpp>.
|
|
|
|
dXSI32;
|
|
|
|
=for hackers
|
|
Found in file XSUB.h
|
|
|
|
=item items
|
|
X<items>
|
|
|
|
Variable which is setup by C<xsubpp> to indicate the number of
|
|
items on the stack. See L<perlxs/"Variable-length Parameter Lists">.
|
|
|
|
I32 items
|
|
|
|
=for hackers
|
|
Found in file XSUB.h
|
|
|
|
=item ix
|
|
X<ix>
|
|
|
|
Variable which is setup by C<xsubpp> to indicate which of an
|
|
XSUB's aliases was used to invoke it. See L<perlxs/"The ALIAS: Keyword">.
|
|
|
|
I32 ix
|
|
|
|
=for hackers
|
|
Found in file XSUB.h
|
|
|
|
=item RETVAL
|
|
X<RETVAL>
|
|
|
|
Variable which is setup by C<xsubpp> to hold the return value for an
|
|
XSUB. This is always the proper type for the XSUB. See
|
|
L<perlxs/"The RETVAL Variable">.
|
|
|
|
(whatever) RETVAL
|
|
|
|
=for hackers
|
|
Found in file XSUB.h
|
|
|
|
=item ST
|
|
X<ST>
|
|
|
|
Used to access elements on the XSUB's stack.
|
|
|
|
SV* ST(int ix)
|
|
|
|
=for hackers
|
|
Found in file XSUB.h
|
|
|
|
=item THIS
|
|
X<THIS>
|
|
|
|
Variable which is setup by C<xsubpp> to designate the object in a C++
|
|
XSUB. This is always the proper type for the C++ object. See C<L</CLASS>> and
|
|
L<perlxs/"Using XS With C++">.
|
|
|
|
(whatever) THIS
|
|
|
|
=for hackers
|
|
Found in file XSUB.h
|
|
|
|
=item UNDERBAR
|
|
X<UNDERBAR>
|
|
|
|
The SV* corresponding to the C<$_> variable. Works even if there
|
|
is a lexical C<$_> in scope.
|
|
|
|
=for hackers
|
|
Found in file XSUB.h
|
|
|
|
=item XS
|
|
X<XS>
|
|
|
|
Macro to declare an XSUB and its C parameter list. This is handled by
|
|
C<xsubpp>. It is the same as using the more explicit C<XS_EXTERNAL> macro.
|
|
|
|
=for hackers
|
|
Found in file XSUB.h
|
|
|
|
=item XS_EXTERNAL
|
|
X<XS_EXTERNAL>
|
|
|
|
Macro to declare an XSUB and its C parameter list explicitly exporting the symbols.
|
|
|
|
=for hackers
|
|
Found in file XSUB.h
|
|
|
|
=item XS_INTERNAL
|
|
X<XS_INTERNAL>
|
|
|
|
Macro to declare an XSUB and its C parameter list without exporting the symbols.
|
|
This is handled by C<xsubpp> and generally preferable over exporting the XSUB
|
|
symbols unnecessarily.
|
|
|
|
=for hackers
|
|
Found in file XSUB.h
|
|
|
|
|
|
=back
|
|
|
|
=head1 Debugging Utilities
|
|
|
|
=over 8
|
|
|
|
=item dump_all
|
|
X<dump_all>
|
|
|
|
Dumps the entire optree of the current program starting at C<PL_main_root> to
|
|
C<STDERR>. Also dumps the optrees for all visible subroutines in
|
|
C<PL_defstash>.
|
|
|
|
void dump_all()
|
|
|
|
=for hackers
|
|
Found in file dump.c
|
|
|
|
=item dump_packsubs
|
|
X<dump_packsubs>
|
|
|
|
Dumps the optrees for all visible subroutines in C<stash>.
|
|
|
|
void dump_packsubs(const HV* stash)
|
|
|
|
=for hackers
|
|
Found in file dump.c
|
|
|
|
=item op_class
|
|
X<op_class>
|
|
|
|
Given an op, determine what type of struct it has been allocated as.
|
|
Returns one of the OPclass enums, such as OPclass_LISTOP.
|
|
|
|
OPclass op_class(const OP *o)
|
|
|
|
=for hackers
|
|
Found in file dump.c
|
|
|
|
=item op_dump
|
|
X<op_dump>
|
|
|
|
Dumps the optree starting at OP C<o> to C<STDERR>.
|
|
|
|
void op_dump(const OP *o)
|
|
|
|
=for hackers
|
|
Found in file dump.c
|
|
|
|
=item sv_dump
|
|
X<sv_dump>
|
|
|
|
Dumps the contents of an SV to the C<STDERR> filehandle.
|
|
|
|
For an example of its output, see L<Devel::Peek>.
|
|
|
|
void sv_dump(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file dump.c
|
|
|
|
|
|
=back
|
|
|
|
=head1 Display and Dump functions
|
|
|
|
=over 8
|
|
|
|
=item pv_display
|
|
X<pv_display>
|
|
|
|
Similar to
|
|
|
|
pv_escape(dsv,pv,cur,pvlim,PERL_PV_ESCAPE_QUOTE);
|
|
|
|
except that an additional "\0" will be appended to the string when
|
|
len > cur and pv[cur] is "\0".
|
|
|
|
Note that the final string may be up to 7 chars longer than pvlim.
|
|
|
|
char* pv_display(SV *dsv, const char *pv, STRLEN cur,
|
|
STRLEN len, STRLEN pvlim)
|
|
|
|
=for hackers
|
|
Found in file dump.c
|
|
|
|
=item pv_escape
|
|
X<pv_escape>
|
|
|
|
Escapes at most the first C<count> chars of C<pv> and puts the results into
|
|
C<dsv> such that the size of the escaped string will not exceed C<max> chars
|
|
and will not contain any incomplete escape sequences. The number of bytes
|
|
escaped will be returned in the C<STRLEN *escaped> parameter if it is not null.
|
|
When the C<dsv> parameter is null no escaping actually occurs, but the number
|
|
of bytes that would be escaped were it not null will be calculated.
|
|
|
|
If flags contains C<PERL_PV_ESCAPE_QUOTE> then any double quotes in the string
|
|
will also be escaped.
|
|
|
|
Normally the SV will be cleared before the escaped string is prepared,
|
|
but when C<PERL_PV_ESCAPE_NOCLEAR> is set this will not occur.
|
|
|
|
If C<PERL_PV_ESCAPE_UNI> is set then the input string is treated as UTF-8
|
|
if C<PERL_PV_ESCAPE_UNI_DETECT> is set then the input string is scanned
|
|
using C<is_utf8_string()> to determine if it is UTF-8.
|
|
|
|
If C<PERL_PV_ESCAPE_ALL> is set then all input chars will be output
|
|
using C<\x01F1> style escapes, otherwise if C<PERL_PV_ESCAPE_NONASCII> is set, only
|
|
non-ASCII chars will be escaped using this style; otherwise, only chars above
|
|
255 will be so escaped; other non printable chars will use octal or
|
|
common escaped patterns like C<\n>.
|
|
Otherwise, if C<PERL_PV_ESCAPE_NOBACKSLASH>
|
|
then all chars below 255 will be treated as printable and
|
|
will be output as literals.
|
|
|
|
If C<PERL_PV_ESCAPE_FIRSTCHAR> is set then only the first char of the
|
|
string will be escaped, regardless of max. If the output is to be in hex,
|
|
then it will be returned as a plain hex
|
|
sequence. Thus the output will either be a single char,
|
|
an octal escape sequence, a special escape like C<\n> or a hex value.
|
|
|
|
If C<PERL_PV_ESCAPE_RE> is set then the escape char used will be a C<"%"> and
|
|
not a C<"\\">. This is because regexes very often contain backslashed
|
|
sequences, whereas C<"%"> is not a particularly common character in patterns.
|
|
|
|
Returns a pointer to the escaped text as held by C<dsv>.
|
|
|
|
char* pv_escape(SV *dsv, char const * const str,
|
|
const STRLEN count, const STRLEN max,
|
|
STRLEN * const escaped,
|
|
const U32 flags)
|
|
|
|
=for hackers
|
|
Found in file dump.c
|
|
|
|
=item pv_pretty
|
|
X<pv_pretty>
|
|
|
|
Converts a string into something presentable, handling escaping via
|
|
C<pv_escape()> and supporting quoting and ellipses.
|
|
|
|
If the C<PERL_PV_PRETTY_QUOTE> flag is set then the result will be
|
|
double quoted with any double quotes in the string escaped. Otherwise
|
|
if the C<PERL_PV_PRETTY_LTGT> flag is set then the result be wrapped in
|
|
angle brackets.
|
|
|
|
If the C<PERL_PV_PRETTY_ELLIPSES> flag is set and not all characters in
|
|
string were output then an ellipsis C<...> will be appended to the
|
|
string. Note that this happens AFTER it has been quoted.
|
|
|
|
If C<start_color> is non-null then it will be inserted after the opening
|
|
quote (if there is one) but before the escaped text. If C<end_color>
|
|
is non-null then it will be inserted after the escaped text but before
|
|
any quotes or ellipses.
|
|
|
|
Returns a pointer to the prettified text as held by C<dsv>.
|
|
|
|
char* pv_pretty(SV *dsv, char const * const str,
|
|
const STRLEN count, const STRLEN max,
|
|
char const * const start_color,
|
|
char const * const end_color,
|
|
const U32 flags)
|
|
|
|
=for hackers
|
|
Found in file dump.c
|
|
|
|
|
|
=back
|
|
|
|
=head1 Embedding Functions
|
|
|
|
=over 8
|
|
|
|
=item cv_clone
|
|
X<cv_clone>
|
|
|
|
Clone a CV, making a lexical closure. C<proto> supplies the prototype
|
|
of the function: its code, pad structure, and other attributes.
|
|
The prototype is combined with a capture of outer lexicals to which the
|
|
code refers, which are taken from the currently-executing instance of
|
|
the immediately surrounding code.
|
|
|
|
CV* cv_clone(CV* proto)
|
|
|
|
=for hackers
|
|
Found in file pad.c
|
|
|
|
=item cv_name
|
|
X<cv_name>
|
|
|
|
Returns an SV containing the name of the CV, mainly for use in error
|
|
reporting. The CV may actually be a GV instead, in which case the returned
|
|
SV holds the GV's name. Anything other than a GV or CV is treated as a
|
|
string already holding the sub name, but this could change in the future.
|
|
|
|
An SV may be passed as a second argument. If so, the name will be assigned
|
|
to it and it will be returned. Otherwise the returned SV will be a new
|
|
mortal.
|
|
|
|
If C<flags> has the C<CV_NAME_NOTQUAL> bit set, then the package name will not be
|
|
included. If the first argument is neither a CV nor a GV, this flag is
|
|
ignored (subject to change).
|
|
|
|
SV * cv_name(CV *cv, SV *sv, U32 flags)
|
|
|
|
=for hackers
|
|
Found in file pad.c
|
|
|
|
=item cv_undef
|
|
X<cv_undef>
|
|
|
|
Clear out all the active components of a CV. This can happen either
|
|
by an explicit C<undef &foo>, or by the reference count going to zero.
|
|
In the former case, we keep the C<CvOUTSIDE> pointer, so that any anonymous
|
|
children can still follow the full lexical scope chain.
|
|
|
|
void cv_undef(CV* cv)
|
|
|
|
=for hackers
|
|
Found in file pad.c
|
|
|
|
=item find_rundefsv
|
|
X<find_rundefsv>
|
|
|
|
Returns the global variable C<$_>.
|
|
|
|
SV* find_rundefsv()
|
|
|
|
=for hackers
|
|
Found in file pad.c
|
|
|
|
=item find_rundefsvoffset
|
|
X<find_rundefsvoffset>
|
|
|
|
|
|
DEPRECATED! It is planned to remove this function from a
|
|
future release of Perl. Do not use it for new code; remove it from
|
|
existing code.
|
|
|
|
|
|
Until the lexical C<$_> feature was removed, this function would
|
|
find the position of the lexical C<$_> in the pad of the
|
|
currently-executing function and return the offset in the current pad,
|
|
or C<NOT_IN_PAD>.
|
|
|
|
Now it always returns C<NOT_IN_PAD>.
|
|
|
|
PADOFFSET find_rundefsvoffset()
|
|
|
|
=for hackers
|
|
Found in file pad.c
|
|
|
|
=item intro_my
|
|
X<intro_my>
|
|
|
|
"Introduce" C<my> variables to visible status. This is called during parsing
|
|
at the end of each statement to make lexical variables visible to subsequent
|
|
statements.
|
|
|
|
U32 intro_my()
|
|
|
|
=for hackers
|
|
Found in file pad.c
|
|
|
|
=item load_module
|
|
X<load_module>
|
|
|
|
Loads the module whose name is pointed to by the string part of C<name>.
|
|
Note that the actual module name, not its filename, should be given.
|
|
Eg, "Foo::Bar" instead of "Foo/Bar.pm". ver, if specified and not NULL,
|
|
provides version semantics similar to C<use Foo::Bar VERSION>. The optional
|
|
trailing arguments can be used to specify arguments to the module's C<import()>
|
|
method, similar to C<use Foo::Bar VERSION LIST>; their precise handling depends
|
|
on the flags. The flags argument is a bitwise-ORed collection of any of
|
|
C<PERL_LOADMOD_DENY>, C<PERL_LOADMOD_NOIMPORT>, or C<PERL_LOADMOD_IMPORT_OPS>
|
|
(or 0 for no flags).
|
|
|
|
If C<PERL_LOADMOD_NOIMPORT> is set, the module is loaded as if with an empty
|
|
import list, as in C<use Foo::Bar ()>; this is the only circumstance in which
|
|
the trailing optional arguments may be omitted entirely. Otherwise, if
|
|
C<PERL_LOADMOD_IMPORT_OPS> is set, the trailing arguments must consist of
|
|
exactly one C<OP*>, containing the op tree that produces the relevant import
|
|
arguments. Otherwise, the trailing arguments must all be C<SV*> values that
|
|
will be used as import arguments; and the list must be terminated with C<(SV*)
|
|
NULL>. If neither C<PERL_LOADMOD_NOIMPORT> nor C<PERL_LOADMOD_IMPORT_OPS> is
|
|
set, the trailing C<NULL> pointer is needed even if no import arguments are
|
|
desired. The reference count for each specified C<SV*> argument is
|
|
decremented. In addition, the C<name> argument is modified.
|
|
|
|
If C<PERL_LOADMOD_DENY> is set, the module is loaded as if with C<no> rather
|
|
than C<use>.
|
|
|
|
void load_module(U32 flags, SV* name, SV* ver, ...)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item my_exit
|
|
X<my_exit>
|
|
|
|
A wrapper for the C library L<exit(3)>, honoring what L<perlapi/PL_exit_flags>
|
|
say to do.
|
|
|
|
void my_exit(U32 status)
|
|
|
|
=for hackers
|
|
Found in file perl.c
|
|
|
|
=item newPADNAMELIST
|
|
X<newPADNAMELIST>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Creates a new pad name list. C<max> is the highest index for which space
|
|
is allocated.
|
|
|
|
PADNAMELIST * newPADNAMELIST(size_t max)
|
|
|
|
=for hackers
|
|
Found in file pad.c
|
|
|
|
=item newPADNAMEouter
|
|
X<newPADNAMEouter>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Constructs and returns a new pad name. Only use this function for names
|
|
that refer to outer lexicals. (See also L</newPADNAMEpvn>.) C<outer> is
|
|
the outer pad name that this one mirrors. The returned pad name has the
|
|
C<PADNAMEt_OUTER> flag already set.
|
|
|
|
PADNAME * newPADNAMEouter(PADNAME *outer)
|
|
|
|
=for hackers
|
|
Found in file pad.c
|
|
|
|
=item newPADNAMEpvn
|
|
X<newPADNAMEpvn>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Constructs and returns a new pad name. C<s> must be a UTF-8 string. Do not
|
|
use this for pad names that point to outer lexicals. See
|
|
C<L</newPADNAMEouter>>.
|
|
|
|
PADNAME * newPADNAMEpvn(const char *s, STRLEN len)
|
|
|
|
=for hackers
|
|
Found in file pad.c
|
|
|
|
=item nothreadhook
|
|
X<nothreadhook>
|
|
|
|
Stub that provides thread hook for perl_destruct when there are
|
|
no threads.
|
|
|
|
int nothreadhook()
|
|
|
|
=for hackers
|
|
Found in file perl.c
|
|
|
|
=item pad_add_anon
|
|
X<pad_add_anon>
|
|
|
|
Allocates a place in the currently-compiling pad (via L</pad_alloc>)
|
|
for an anonymous function that is lexically scoped inside the
|
|
currently-compiling function.
|
|
The function C<func> is linked into the pad, and its C<CvOUTSIDE> link
|
|
to the outer scope is weakened to avoid a reference loop.
|
|
|
|
One reference count is stolen, so you may need to do C<SvREFCNT_inc(func)>.
|
|
|
|
C<optype> should be an opcode indicating the type of operation that the
|
|
pad entry is to support. This doesn't affect operational semantics,
|
|
but is used for debugging.
|
|
|
|
PADOFFSET pad_add_anon(CV* func, I32 optype)
|
|
|
|
=for hackers
|
|
Found in file pad.c
|
|
|
|
=item pad_add_name_pv
|
|
X<pad_add_name_pv>
|
|
|
|
Exactly like L</pad_add_name_pvn>, but takes a nul-terminated string
|
|
instead of a string/length pair.
|
|
|
|
PADOFFSET pad_add_name_pv(const char *name,
|
|
const U32 flags,
|
|
HV *typestash, HV *ourstash)
|
|
|
|
=for hackers
|
|
Found in file pad.c
|
|
|
|
=item pad_add_name_pvn
|
|
X<pad_add_name_pvn>
|
|
|
|
Allocates a place in the currently-compiling pad for a named lexical
|
|
variable. Stores the name and other metadata in the name part of the
|
|
pad, and makes preparations to manage the variable's lexical scoping.
|
|
Returns the offset of the allocated pad slot.
|
|
|
|
C<namepv>/C<namelen> specify the variable's name, including leading sigil.
|
|
If C<typestash> is non-null, the name is for a typed lexical, and this
|
|
identifies the type. If C<ourstash> is non-null, it's a lexical reference
|
|
to a package variable, and this identifies the package. The following
|
|
flags can be OR'ed together:
|
|
|
|
padadd_OUR redundantly specifies if it's a package var
|
|
padadd_STATE variable will retain value persistently
|
|
padadd_NO_DUP_CHECK skip check for lexical shadowing
|
|
|
|
PADOFFSET pad_add_name_pvn(const char *namepv,
|
|
STRLEN namelen, U32 flags,
|
|
HV *typestash, HV *ourstash)
|
|
|
|
=for hackers
|
|
Found in file pad.c
|
|
|
|
=item pad_add_name_sv
|
|
X<pad_add_name_sv>
|
|
|
|
Exactly like L</pad_add_name_pvn>, but takes the name string in the form
|
|
of an SV instead of a string/length pair.
|
|
|
|
PADOFFSET pad_add_name_sv(SV *name, U32 flags,
|
|
HV *typestash, HV *ourstash)
|
|
|
|
=for hackers
|
|
Found in file pad.c
|
|
|
|
=item pad_alloc
|
|
X<pad_alloc>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Allocates a place in the currently-compiling pad,
|
|
returning the offset of the allocated pad slot.
|
|
No name is initially attached to the pad slot.
|
|
C<tmptype> is a set of flags indicating the kind of pad entry required,
|
|
which will be set in the value SV for the allocated pad entry:
|
|
|
|
SVs_PADMY named lexical variable ("my", "our", "state")
|
|
SVs_PADTMP unnamed temporary store
|
|
SVf_READONLY constant shared between recursion levels
|
|
|
|
C<SVf_READONLY> has been supported here only since perl 5.20. To work with
|
|
earlier versions as well, use C<SVf_READONLY|SVs_PADTMP>. C<SVf_READONLY>
|
|
does not cause the SV in the pad slot to be marked read-only, but simply
|
|
tells C<pad_alloc> that it I<will> be made read-only (by the caller), or at
|
|
least should be treated as such.
|
|
|
|
C<optype> should be an opcode indicating the type of operation that the
|
|
pad entry is to support. This doesn't affect operational semantics,
|
|
but is used for debugging.
|
|
|
|
PADOFFSET pad_alloc(I32 optype, U32 tmptype)
|
|
|
|
=for hackers
|
|
Found in file pad.c
|
|
|
|
=item pad_findmy_pv
|
|
X<pad_findmy_pv>
|
|
|
|
Exactly like L</pad_findmy_pvn>, but takes a nul-terminated string
|
|
instead of a string/length pair.
|
|
|
|
PADOFFSET pad_findmy_pv(const char* name, U32 flags)
|
|
|
|
=for hackers
|
|
Found in file pad.c
|
|
|
|
=item pad_findmy_pvn
|
|
X<pad_findmy_pvn>
|
|
|
|
Given the name of a lexical variable, find its position in the
|
|
currently-compiling pad.
|
|
C<namepv>/C<namelen> specify the variable's name, including leading sigil.
|
|
C<flags> is reserved and must be zero.
|
|
If it is not in the current pad but appears in the pad of any lexically
|
|
enclosing scope, then a pseudo-entry for it is added in the current pad.
|
|
Returns the offset in the current pad,
|
|
or C<NOT_IN_PAD> if no such lexical is in scope.
|
|
|
|
PADOFFSET pad_findmy_pvn(const char* namepv,
|
|
STRLEN namelen, U32 flags)
|
|
|
|
=for hackers
|
|
Found in file pad.c
|
|
|
|
=item pad_findmy_sv
|
|
X<pad_findmy_sv>
|
|
|
|
Exactly like L</pad_findmy_pvn>, but takes the name string in the form
|
|
of an SV instead of a string/length pair.
|
|
|
|
PADOFFSET pad_findmy_sv(SV* name, U32 flags)
|
|
|
|
=for hackers
|
|
Found in file pad.c
|
|
|
|
=item padnamelist_fetch
|
|
X<padnamelist_fetch>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Fetches the pad name from the given index.
|
|
|
|
PADNAME * padnamelist_fetch(PADNAMELIST *pnl,
|
|
SSize_t key)
|
|
|
|
=for hackers
|
|
Found in file pad.c
|
|
|
|
=item padnamelist_store
|
|
X<padnamelist_store>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Stores the pad name (which may be null) at the given index, freeing any
|
|
existing pad name in that slot.
|
|
|
|
PADNAME ** padnamelist_store(PADNAMELIST *pnl,
|
|
SSize_t key, PADNAME *val)
|
|
|
|
=for hackers
|
|
Found in file pad.c
|
|
|
|
=item pad_setsv
|
|
X<pad_setsv>
|
|
|
|
Set the value at offset C<po> in the current (compiling or executing) pad.
|
|
Use the macro C<PAD_SETSV()> rather than calling this function directly.
|
|
|
|
void pad_setsv(PADOFFSET po, SV* sv)
|
|
|
|
=for hackers
|
|
Found in file pad.c
|
|
|
|
=item pad_sv
|
|
X<pad_sv>
|
|
|
|
Get the value at offset C<po> in the current (compiling or executing) pad.
|
|
Use macro C<PAD_SV> instead of calling this function directly.
|
|
|
|
SV* pad_sv(PADOFFSET po)
|
|
|
|
=for hackers
|
|
Found in file pad.c
|
|
|
|
=item pad_tidy
|
|
X<pad_tidy>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Tidy up a pad at the end of compilation of the code to which it belongs.
|
|
Jobs performed here are: remove most stuff from the pads of anonsub
|
|
prototypes; give it a C<@_>; mark temporaries as such. C<type> indicates
|
|
the kind of subroutine:
|
|
|
|
padtidy_SUB ordinary subroutine
|
|
padtidy_SUBCLONE prototype for lexical closure
|
|
padtidy_FORMAT format
|
|
|
|
void pad_tidy(padtidy_type type)
|
|
|
|
=for hackers
|
|
Found in file pad.c
|
|
|
|
=item perl_alloc
|
|
X<perl_alloc>
|
|
|
|
Allocates a new Perl interpreter. See L<perlembed>.
|
|
|
|
PerlInterpreter* perl_alloc()
|
|
|
|
=for hackers
|
|
Found in file perl.c
|
|
|
|
=item perl_construct
|
|
X<perl_construct>
|
|
|
|
Initializes a new Perl interpreter. See L<perlembed>.
|
|
|
|
void perl_construct(PerlInterpreter *my_perl)
|
|
|
|
=for hackers
|
|
Found in file perl.c
|
|
|
|
=item perl_destruct
|
|
X<perl_destruct>
|
|
|
|
Shuts down a Perl interpreter. See L<perlembed> for a tutorial.
|
|
|
|
C<my_perl> points to the Perl interpreter. It must have been previously
|
|
created through the use of L</perl_alloc> and L</perl_construct>. It may
|
|
have been initialised through L</perl_parse>, and may have been used
|
|
through L</perl_run> and other means. This function should be called for
|
|
any Perl interpreter that has been constructed with L</perl_construct>,
|
|
even if subsequent operations on it failed, for example if L</perl_parse>
|
|
returned a non-zero value.
|
|
|
|
If the interpreter's C<PL_exit_flags> word has the
|
|
C<PERL_EXIT_DESTRUCT_END> flag set, then this function will execute code
|
|
in C<END> blocks before performing the rest of destruction. If it is
|
|
desired to make any use of the interpreter between L</perl_parse> and
|
|
L</perl_destruct> other than just calling L</perl_run>, then this flag
|
|
should be set early on. This matters if L</perl_run> will not be called,
|
|
or if anything else will be done in addition to calling L</perl_run>.
|
|
|
|
Returns a value be a suitable value to pass to the C library function
|
|
C<exit> (or to return from C<main>), to serve as an exit code indicating
|
|
the nature of the way the interpreter terminated. This takes into account
|
|
any failure of L</perl_parse> and any early exit from L</perl_run>.
|
|
The exit code is of the type required by the host operating system,
|
|
so because of differing exit code conventions it is not portable to
|
|
interpret specific numeric values as having specific meanings.
|
|
|
|
int perl_destruct(PerlInterpreter *my_perl)
|
|
|
|
=for hackers
|
|
Found in file perl.c
|
|
|
|
=item perl_free
|
|
X<perl_free>
|
|
|
|
Releases a Perl interpreter. See L<perlembed>.
|
|
|
|
void perl_free(PerlInterpreter *my_perl)
|
|
|
|
=for hackers
|
|
Found in file perl.c
|
|
|
|
=item perl_parse
|
|
X<perl_parse>
|
|
|
|
Tells a Perl interpreter to parse a Perl script. This performs most
|
|
of the initialisation of a Perl interpreter. See L<perlembed> for
|
|
a tutorial.
|
|
|
|
C<my_perl> points to the Perl interpreter that is to parse the script.
|
|
It must have been previously created through the use of L</perl_alloc>
|
|
and L</perl_construct>. C<xsinit> points to a callback function that
|
|
will be called to set up the ability for this Perl interpreter to load
|
|
XS extensions, or may be null to perform no such setup.
|
|
|
|
C<argc> and C<argv> supply a set of command-line arguments to the Perl
|
|
interpreter, as would normally be passed to the C<main> function of
|
|
a C program. C<argv[argc]> must be null. These arguments are where
|
|
the script to parse is specified, either by naming a script file or by
|
|
providing a script in a C<-e> option.
|
|
If L<C<$0>|perlvar/$0> will be written to in the Perl interpreter, then
|
|
the argument strings must be in writable memory, and so mustn't just be
|
|
string constants.
|
|
|
|
C<env> specifies a set of environment variables that will be used by
|
|
this Perl interpreter. If non-null, it must point to a null-terminated
|
|
array of environment strings. If null, the Perl interpreter will use
|
|
the environment supplied by the C<environ> global variable.
|
|
|
|
This function initialises the interpreter, and parses and compiles the
|
|
script specified by the command-line arguments. This includes executing
|
|
code in C<BEGIN>, C<UNITCHECK>, and C<CHECK> blocks. It does not execute
|
|
C<INIT> blocks or the main program.
|
|
|
|
Returns an integer of slightly tricky interpretation. The correct
|
|
use of the return value is as a truth value indicating whether there
|
|
was a failure in initialisation. If zero is returned, this indicates
|
|
that initialisation was successful, and it is safe to proceed to call
|
|
L</perl_run> and make other use of it. If a non-zero value is returned,
|
|
this indicates some problem that means the interpreter wants to terminate.
|
|
The interpreter should not be just abandoned upon such failure; the caller
|
|
should proceed to shut the interpreter down cleanly with L</perl_destruct>
|
|
and free it with L</perl_free>.
|
|
|
|
For historical reasons, the non-zero return value also attempts to
|
|
be a suitable value to pass to the C library function C<exit> (or to
|
|
return from C<main>), to serve as an exit code indicating the nature
|
|
of the way initialisation terminated. However, this isn't portable,
|
|
due to differing exit code conventions. A historical bug is preserved
|
|
for the time being: if the Perl built-in C<exit> is called during this
|
|
function's execution, with a type of exit entailing a zero exit code
|
|
under the host operating system's conventions, then this function
|
|
returns zero rather than a non-zero value. This bug, [perl #2754],
|
|
leads to C<perl_run> being called (and therefore C<INIT> blocks and the
|
|
main program running) despite a call to C<exit>. It has been preserved
|
|
because a popular module-installing module has come to rely on it and
|
|
needs time to be fixed. This issue is [perl #132577], and the original
|
|
bug is due to be fixed in Perl 5.30.
|
|
|
|
int perl_parse(PerlInterpreter *my_perl,
|
|
XSINIT_t xsinit, int argc,
|
|
char** argv, char** env)
|
|
|
|
=for hackers
|
|
Found in file perl.c
|
|
|
|
=item perl_run
|
|
X<perl_run>
|
|
|
|
Tells a Perl interpreter to run its main program. See L<perlembed>
|
|
for a tutorial.
|
|
|
|
C<my_perl> points to the Perl interpreter. It must have been previously
|
|
created through the use of L</perl_alloc> and L</perl_construct>, and
|
|
initialised through L</perl_parse>. This function should not be called
|
|
if L</perl_parse> returned a non-zero value, indicating a failure in
|
|
initialisation or compilation.
|
|
|
|
This function executes code in C<INIT> blocks, and then executes the
|
|
main program. The code to be executed is that established by the prior
|
|
call to L</perl_parse>. If the interpreter's C<PL_exit_flags> word
|
|
does not have the C<PERL_EXIT_DESTRUCT_END> flag set, then this function
|
|
will also execute code in C<END> blocks. If it is desired to make any
|
|
further use of the interpreter after calling this function, then C<END>
|
|
blocks should be postponed to L</perl_destruct> time by setting that flag.
|
|
|
|
Returns an integer of slightly tricky interpretation. The correct use
|
|
of the return value is as a truth value indicating whether the program
|
|
terminated non-locally. If zero is returned, this indicates that
|
|
the program ran to completion, and it is safe to make other use of the
|
|
interpreter (provided that the C<PERL_EXIT_DESTRUCT_END> flag was set as
|
|
described above). If a non-zero value is returned, this indicates that
|
|
the interpreter wants to terminate early. The interpreter should not be
|
|
just abandoned because of this desire to terminate; the caller should
|
|
proceed to shut the interpreter down cleanly with L</perl_destruct>
|
|
and free it with L</perl_free>.
|
|
|
|
For historical reasons, the non-zero return value also attempts to
|
|
be a suitable value to pass to the C library function C<exit> (or to
|
|
return from C<main>), to serve as an exit code indicating the nature of
|
|
the way the program terminated. However, this isn't portable, due to
|
|
differing exit code conventions. An attempt is made to return an exit
|
|
code of the type required by the host operating system, but because
|
|
it is constrained to be non-zero, it is not necessarily possible to
|
|
indicate every type of exit. It is only reliable on Unix, where a zero
|
|
exit code can be augmented with a set bit that will be ignored. In any
|
|
case, this function is not the correct place to acquire an exit code:
|
|
one should get that from L</perl_destruct>.
|
|
|
|
int perl_run(PerlInterpreter *my_perl)
|
|
|
|
=for hackers
|
|
Found in file perl.c
|
|
|
|
=item require_pv
|
|
X<require_pv>
|
|
|
|
Tells Perl to C<require> the file named by the string argument. It is
|
|
analogous to the Perl code C<eval "require '$file'">. It's even
|
|
implemented that way; consider using load_module instead.
|
|
|
|
NOTE: the perl_ form of this function is deprecated.
|
|
|
|
void require_pv(const char* pv)
|
|
|
|
=for hackers
|
|
Found in file perl.c
|
|
|
|
|
|
=back
|
|
|
|
=head1 Exception Handling (simple) Macros
|
|
|
|
=over 8
|
|
|
|
=item dXCPT
|
|
X<dXCPT>
|
|
|
|
Set up necessary local variables for exception handling.
|
|
See L<perlguts/"Exception Handling">.
|
|
|
|
dXCPT;
|
|
|
|
=for hackers
|
|
Found in file XSUB.h
|
|
|
|
=item XCPT_CATCH
|
|
X<XCPT_CATCH>
|
|
|
|
Introduces a catch block. See L<perlguts/"Exception Handling">.
|
|
|
|
=for hackers
|
|
Found in file XSUB.h
|
|
|
|
=item XCPT_RETHROW
|
|
X<XCPT_RETHROW>
|
|
|
|
Rethrows a previously caught exception. See L<perlguts/"Exception Handling">.
|
|
|
|
XCPT_RETHROW;
|
|
|
|
=for hackers
|
|
Found in file XSUB.h
|
|
|
|
=item XCPT_TRY_END
|
|
X<XCPT_TRY_END>
|
|
|
|
Ends a try block. See L<perlguts/"Exception Handling">.
|
|
|
|
=for hackers
|
|
Found in file XSUB.h
|
|
|
|
=item XCPT_TRY_START
|
|
X<XCPT_TRY_START>
|
|
|
|
Starts a try block. See L<perlguts/"Exception Handling">.
|
|
|
|
=for hackers
|
|
Found in file XSUB.h
|
|
|
|
|
|
=back
|
|
|
|
=head1 Functions in file vutil.c
|
|
|
|
|
|
=over 8
|
|
|
|
=item new_version
|
|
X<new_version>
|
|
|
|
Returns a new version object based on the passed in SV:
|
|
|
|
SV *sv = new_version(SV *ver);
|
|
|
|
Does not alter the passed in ver SV. See "upg_version" if you
|
|
want to upgrade the SV.
|
|
|
|
SV* new_version(SV *ver)
|
|
|
|
=for hackers
|
|
Found in file vutil.c
|
|
|
|
=item prescan_version
|
|
X<prescan_version>
|
|
|
|
Validate that a given string can be parsed as a version object, but doesn't
|
|
actually perform the parsing. Can use either strict or lax validation rules.
|
|
Can optionally set a number of hint variables to save the parsing code
|
|
some time when tokenizing.
|
|
|
|
const char* prescan_version(const char *s, bool strict,
|
|
const char** errstr,
|
|
bool *sqv,
|
|
int *ssaw_decimal,
|
|
int *swidth, bool *salpha)
|
|
|
|
=for hackers
|
|
Found in file vutil.c
|
|
|
|
=item scan_version
|
|
X<scan_version>
|
|
|
|
Returns a pointer to the next character after the parsed
|
|
version string, as well as upgrading the passed in SV to
|
|
an RV.
|
|
|
|
Function must be called with an already existing SV like
|
|
|
|
sv = newSV(0);
|
|
s = scan_version(s, SV *sv, bool qv);
|
|
|
|
Performs some preprocessing to the string to ensure that
|
|
it has the correct characteristics of a version. Flags the
|
|
object if it contains an underscore (which denotes this
|
|
is an alpha version). The boolean qv denotes that the version
|
|
should be interpreted as if it had multiple decimals, even if
|
|
it doesn't.
|
|
|
|
const char* scan_version(const char *s, SV *rv, bool qv)
|
|
|
|
=for hackers
|
|
Found in file vutil.c
|
|
|
|
=item upg_version
|
|
X<upg_version>
|
|
|
|
In-place upgrade of the supplied SV to a version object.
|
|
|
|
SV *sv = upg_version(SV *sv, bool qv);
|
|
|
|
Returns a pointer to the upgraded SV. Set the boolean qv if you want
|
|
to force this SV to be interpreted as an "extended" version.
|
|
|
|
SV* upg_version(SV *ver, bool qv)
|
|
|
|
=for hackers
|
|
Found in file vutil.c
|
|
|
|
=item vcmp
|
|
X<vcmp>
|
|
|
|
Version object aware cmp. Both operands must already have been
|
|
converted into version objects.
|
|
|
|
int vcmp(SV *lhv, SV *rhv)
|
|
|
|
=for hackers
|
|
Found in file vutil.c
|
|
|
|
=item vnormal
|
|
X<vnormal>
|
|
|
|
Accepts a version object and returns the normalized string
|
|
representation. Call like:
|
|
|
|
sv = vnormal(rv);
|
|
|
|
NOTE: you can pass either the object directly or the SV
|
|
contained within the RV.
|
|
|
|
The SV returned has a refcount of 1.
|
|
|
|
SV* vnormal(SV *vs)
|
|
|
|
=for hackers
|
|
Found in file vutil.c
|
|
|
|
=item vnumify
|
|
X<vnumify>
|
|
|
|
Accepts a version object and returns the normalized floating
|
|
point representation. Call like:
|
|
|
|
sv = vnumify(rv);
|
|
|
|
NOTE: you can pass either the object directly or the SV
|
|
contained within the RV.
|
|
|
|
The SV returned has a refcount of 1.
|
|
|
|
SV* vnumify(SV *vs)
|
|
|
|
=for hackers
|
|
Found in file vutil.c
|
|
|
|
=item vstringify
|
|
X<vstringify>
|
|
|
|
In order to maintain maximum compatibility with earlier versions
|
|
of Perl, this function will return either the floating point
|
|
notation or the multiple dotted notation, depending on whether
|
|
the original version contained 1 or more dots, respectively.
|
|
|
|
The SV returned has a refcount of 1.
|
|
|
|
SV* vstringify(SV *vs)
|
|
|
|
=for hackers
|
|
Found in file vutil.c
|
|
|
|
=item vverify
|
|
X<vverify>
|
|
|
|
Validates that the SV contains valid internal structure for a version object.
|
|
It may be passed either the version object (RV) or the hash itself (HV). If
|
|
the structure is valid, it returns the HV. If the structure is invalid,
|
|
it returns NULL.
|
|
|
|
SV *hv = vverify(sv);
|
|
|
|
Note that it only confirms the bare minimum structure (so as not to get
|
|
confused by derived classes which may contain additional hash entries):
|
|
|
|
=over 4
|
|
|
|
=item * The SV is an HV or a reference to an HV
|
|
|
|
=item * The hash contains a "version" key
|
|
|
|
=item * The "version" key has a reference to an AV as its value
|
|
|
|
=back
|
|
|
|
SV* vverify(SV *vs)
|
|
|
|
=for hackers
|
|
Found in file vutil.c
|
|
|
|
|
|
=back
|
|
|
|
=head1 "Gimme" Values
|
|
|
|
=over 8
|
|
|
|
=item G_ARRAY
|
|
X<G_ARRAY>
|
|
|
|
Used to indicate list context. See C<L</GIMME_V>>, C<L</GIMME>> and
|
|
L<perlcall>.
|
|
|
|
=for hackers
|
|
Found in file cop.h
|
|
|
|
=item G_DISCARD
|
|
X<G_DISCARD>
|
|
|
|
Indicates that arguments returned from a callback should be discarded. See
|
|
L<perlcall>.
|
|
|
|
=for hackers
|
|
Found in file cop.h
|
|
|
|
=item G_EVAL
|
|
X<G_EVAL>
|
|
|
|
Used to force a Perl C<eval> wrapper around a callback. See
|
|
L<perlcall>.
|
|
|
|
=for hackers
|
|
Found in file cop.h
|
|
|
|
=item GIMME
|
|
X<GIMME>
|
|
|
|
A backward-compatible version of C<GIMME_V> which can only return
|
|
C<G_SCALAR> or C<G_ARRAY>; in a void context, it returns C<G_SCALAR>.
|
|
Deprecated. Use C<GIMME_V> instead.
|
|
|
|
U32 GIMME
|
|
|
|
=for hackers
|
|
Found in file op.h
|
|
|
|
=item GIMME_V
|
|
X<GIMME_V>
|
|
|
|
The XSUB-writer's equivalent to Perl's C<wantarray>. Returns C<G_VOID>,
|
|
C<G_SCALAR> or C<G_ARRAY> for void, scalar or list context,
|
|
respectively. See L<perlcall> for a usage example.
|
|
|
|
U32 GIMME_V
|
|
|
|
=for hackers
|
|
Found in file op.h
|
|
|
|
=item G_NOARGS
|
|
X<G_NOARGS>
|
|
|
|
Indicates that no arguments are being sent to a callback. See
|
|
L<perlcall>.
|
|
|
|
=for hackers
|
|
Found in file cop.h
|
|
|
|
=item G_SCALAR
|
|
X<G_SCALAR>
|
|
|
|
Used to indicate scalar context. See C<L</GIMME_V>>, C<L</GIMME>>, and
|
|
L<perlcall>.
|
|
|
|
=for hackers
|
|
Found in file cop.h
|
|
|
|
=item G_VOID
|
|
X<G_VOID>
|
|
|
|
Used to indicate void context. See C<L</GIMME_V>> and L<perlcall>.
|
|
|
|
=for hackers
|
|
Found in file cop.h
|
|
|
|
|
|
=back
|
|
|
|
=head1 Global Variables
|
|
|
|
These variables are global to an entire process. They are shared between
|
|
all interpreters and all threads in a process. Any variables not documented
|
|
here may be changed or removed without notice, so don't use them!
|
|
If you feel you really do need to use an unlisted variable, first send email to
|
|
L<perl5-porters@perl.org|mailto:perl5-porters@perl.org>. It may be that
|
|
someone there will point out a way to accomplish what you need without using an
|
|
internal variable. But if not, you should get a go-ahead to document and then
|
|
use the variable.
|
|
|
|
|
|
=over 8
|
|
|
|
=item PL_check
|
|
X<PL_check>
|
|
|
|
Array, indexed by opcode, of functions that will be called for the "check"
|
|
phase of optree building during compilation of Perl code. For most (but
|
|
not all) types of op, once the op has been initially built and populated
|
|
with child ops it will be filtered through the check function referenced
|
|
by the appropriate element of this array. The new op is passed in as the
|
|
sole argument to the check function, and the check function returns the
|
|
completed op. The check function may (as the name suggests) check the op
|
|
for validity and signal errors. It may also initialise or modify parts of
|
|
the ops, or perform more radical surgery such as adding or removing child
|
|
ops, or even throw the op away and return a different op in its place.
|
|
|
|
This array of function pointers is a convenient place to hook into the
|
|
compilation process. An XS module can put its own custom check function
|
|
in place of any of the standard ones, to influence the compilation of a
|
|
particular type of op. However, a custom check function must never fully
|
|
replace a standard check function (or even a custom check function from
|
|
another module). A module modifying checking must instead B<wrap> the
|
|
preexisting check function. A custom check function must be selective
|
|
about when to apply its custom behaviour. In the usual case where
|
|
it decides not to do anything special with an op, it must chain the
|
|
preexisting op function. Check functions are thus linked in a chain,
|
|
with the core's base checker at the end.
|
|
|
|
For thread safety, modules should not write directly to this array.
|
|
Instead, use the function L</wrap_op_checker>.
|
|
|
|
=for hackers
|
|
Found in file perlvars.h
|
|
|
|
=item PL_keyword_plugin
|
|
X<PL_keyword_plugin>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Function pointer, pointing at a function used to handle extended keywords.
|
|
The function should be declared as
|
|
|
|
int keyword_plugin_function(pTHX_
|
|
char *keyword_ptr, STRLEN keyword_len,
|
|
OP **op_ptr)
|
|
|
|
The function is called from the tokeniser, whenever a possible keyword
|
|
is seen. C<keyword_ptr> points at the word in the parser's input
|
|
buffer, and C<keyword_len> gives its length; it is not null-terminated.
|
|
The function is expected to examine the word, and possibly other state
|
|
such as L<%^H|perlvar/%^H>, to decide whether it wants to handle it
|
|
as an extended keyword. If it does not, the function should return
|
|
C<KEYWORD_PLUGIN_DECLINE>, and the normal parser process will continue.
|
|
|
|
If the function wants to handle the keyword, it first must
|
|
parse anything following the keyword that is part of the syntax
|
|
introduced by the keyword. See L</Lexer interface> for details.
|
|
|
|
When a keyword is being handled, the plugin function must build
|
|
a tree of C<OP> structures, representing the code that was parsed.
|
|
The root of the tree must be stored in C<*op_ptr>. The function then
|
|
returns a constant indicating the syntactic role of the construct that
|
|
it has parsed: C<KEYWORD_PLUGIN_STMT> if it is a complete statement, or
|
|
C<KEYWORD_PLUGIN_EXPR> if it is an expression. Note that a statement
|
|
construct cannot be used inside an expression (except via C<do BLOCK>
|
|
and similar), and an expression is not a complete statement (it requires
|
|
at least a terminating semicolon).
|
|
|
|
When a keyword is handled, the plugin function may also have
|
|
(compile-time) side effects. It may modify C<%^H>, define functions, and
|
|
so on. Typically, if side effects are the main purpose of a handler,
|
|
it does not wish to generate any ops to be included in the normal
|
|
compilation. In this case it is still required to supply an op tree,
|
|
but it suffices to generate a single null op.
|
|
|
|
That's how the C<*PL_keyword_plugin> function needs to behave overall.
|
|
Conventionally, however, one does not completely replace the existing
|
|
handler function. Instead, take a copy of C<PL_keyword_plugin> before
|
|
assigning your own function pointer to it. Your handler function should
|
|
look for keywords that it is interested in and handle those. Where it
|
|
is not interested, it should call the saved plugin function, passing on
|
|
the arguments it received. Thus C<PL_keyword_plugin> actually points
|
|
at a chain of handler functions, all of which have an opportunity to
|
|
handle keywords, and only the last function in the chain (built into
|
|
the Perl core) will normally return C<KEYWORD_PLUGIN_DECLINE>.
|
|
|
|
For thread safety, modules should not set this variable directly.
|
|
Instead, use the function L</wrap_keyword_plugin>.
|
|
|
|
=for hackers
|
|
Found in file perlvars.h
|
|
|
|
=item PL_phase
|
|
X<PL_phase>
|
|
|
|
A value that indicates the current Perl interpreter's phase. Possible values
|
|
include C<PERL_PHASE_CONSTRUCT>, C<PERL_PHASE_START>, C<PERL_PHASE_CHECK>,
|
|
C<PERL_PHASE_INIT>, C<PERL_PHASE_RUN>, C<PERL_PHASE_END>, and
|
|
C<PERL_PHASE_DESTRUCT>.
|
|
|
|
For example, the following determines whether the interpreter is in
|
|
global destruction:
|
|
|
|
if (PL_phase == PERL_PHASE_DESTRUCT) {
|
|
// we are in global destruction
|
|
}
|
|
|
|
C<PL_phase> was introduced in Perl 5.14; in prior perls you can use
|
|
C<PL_dirty> (boolean) to determine whether the interpreter is in global
|
|
destruction. (Use of C<PL_dirty> is discouraged since 5.14.)
|
|
|
|
enum perl_phase PL_phase
|
|
|
|
=for hackers
|
|
Found in file perlvars.h
|
|
|
|
|
|
=back
|
|
|
|
=head1 GV Functions
|
|
|
|
A GV is a structure which corresponds to to a Perl typeglob, ie *foo.
|
|
It is a structure that holds a pointer to a scalar, an array, a hash etc,
|
|
corresponding to $foo, @foo, %foo.
|
|
|
|
GVs are usually found as values in stashes (symbol table hashes) where
|
|
Perl stores its global variables.
|
|
|
|
|
|
=over 8
|
|
|
|
=item GvAV
|
|
X<GvAV>
|
|
|
|
Return the AV from the GV.
|
|
|
|
AV* GvAV(GV* gv)
|
|
|
|
=for hackers
|
|
Found in file gv.h
|
|
|
|
=item gv_const_sv
|
|
X<gv_const_sv>
|
|
|
|
If C<gv> is a typeglob whose subroutine entry is a constant sub eligible for
|
|
inlining, or C<gv> is a placeholder reference that would be promoted to such
|
|
a typeglob, then returns the value returned by the sub. Otherwise, returns
|
|
C<NULL>.
|
|
|
|
SV* gv_const_sv(GV* gv)
|
|
|
|
=for hackers
|
|
Found in file gv.c
|
|
|
|
=item GvCV
|
|
X<GvCV>
|
|
|
|
Return the CV from the GV.
|
|
|
|
CV* GvCV(GV* gv)
|
|
|
|
=for hackers
|
|
Found in file gv.h
|
|
|
|
=item gv_fetchmeth
|
|
X<gv_fetchmeth>
|
|
|
|
Like L</gv_fetchmeth_pvn>, but lacks a flags parameter.
|
|
|
|
GV* gv_fetchmeth(HV* stash, const char* name,
|
|
STRLEN len, I32 level)
|
|
|
|
=for hackers
|
|
Found in file gv.c
|
|
|
|
=item gv_fetchmethod_autoload
|
|
X<gv_fetchmethod_autoload>
|
|
|
|
Returns the glob which contains the subroutine to call to invoke the method
|
|
on the C<stash>. In fact in the presence of autoloading this may be the
|
|
glob for "AUTOLOAD". In this case the corresponding variable C<$AUTOLOAD> is
|
|
already setup.
|
|
|
|
The third parameter of C<gv_fetchmethod_autoload> determines whether
|
|
AUTOLOAD lookup is performed if the given method is not present: non-zero
|
|
means yes, look for AUTOLOAD; zero means no, don't look for AUTOLOAD.
|
|
Calling C<gv_fetchmethod> is equivalent to calling C<gv_fetchmethod_autoload>
|
|
with a non-zero C<autoload> parameter.
|
|
|
|
These functions grant C<"SUPER"> token
|
|
as a prefix of the method name. Note
|
|
that if you want to keep the returned glob for a long time, you need to
|
|
check for it being "AUTOLOAD", since at the later time the call may load a
|
|
different subroutine due to C<$AUTOLOAD> changing its value. Use the glob
|
|
created as a side effect to do this.
|
|
|
|
These functions have the same side-effects as C<gv_fetchmeth> with
|
|
C<level==0>. The warning against passing the GV returned by
|
|
C<gv_fetchmeth> to C<call_sv> applies equally to these functions.
|
|
|
|
GV* gv_fetchmethod_autoload(HV* stash,
|
|
const char* name,
|
|
I32 autoload)
|
|
|
|
=for hackers
|
|
Found in file gv.c
|
|
|
|
=item gv_fetchmeth_autoload
|
|
X<gv_fetchmeth_autoload>
|
|
|
|
This is the old form of L</gv_fetchmeth_pvn_autoload>, which has no flags
|
|
parameter.
|
|
|
|
GV* gv_fetchmeth_autoload(HV* stash,
|
|
const char* name,
|
|
STRLEN len, I32 level)
|
|
|
|
=for hackers
|
|
Found in file gv.c
|
|
|
|
=item gv_fetchmeth_pv
|
|
X<gv_fetchmeth_pv>
|
|
|
|
Exactly like L</gv_fetchmeth_pvn>, but takes a nul-terminated string
|
|
instead of a string/length pair.
|
|
|
|
GV* gv_fetchmeth_pv(HV* stash, const char* name,
|
|
I32 level, U32 flags)
|
|
|
|
=for hackers
|
|
Found in file gv.c
|
|
|
|
=item gv_fetchmeth_pvn
|
|
X<gv_fetchmeth_pvn>
|
|
|
|
Returns the glob with the given C<name> and a defined subroutine or
|
|
C<NULL>. The glob lives in the given C<stash>, or in the stashes
|
|
accessible via C<@ISA> and C<UNIVERSAL::>.
|
|
|
|
The argument C<level> should be either 0 or -1. If C<level==0>, as a
|
|
side-effect creates a glob with the given C<name> in the given C<stash>
|
|
which in the case of success contains an alias for the subroutine, and sets
|
|
up caching info for this glob.
|
|
|
|
The only significant values for C<flags> are C<GV_SUPER> and C<SVf_UTF8>.
|
|
|
|
C<GV_SUPER> indicates that we want to look up the method in the superclasses
|
|
of the C<stash>.
|
|
|
|
The
|
|
GV returned from C<gv_fetchmeth> may be a method cache entry, which is not
|
|
visible to Perl code. So when calling C<call_sv>, you should not use
|
|
the GV directly; instead, you should use the method's CV, which can be
|
|
obtained from the GV with the C<GvCV> macro.
|
|
|
|
GV* gv_fetchmeth_pvn(HV* stash, const char* name,
|
|
STRLEN len, I32 level,
|
|
U32 flags)
|
|
|
|
=for hackers
|
|
Found in file gv.c
|
|
|
|
=item gv_fetchmeth_pvn_autoload
|
|
X<gv_fetchmeth_pvn_autoload>
|
|
|
|
Same as C<gv_fetchmeth_pvn()>, but looks for autoloaded subroutines too.
|
|
Returns a glob for the subroutine.
|
|
|
|
For an autoloaded subroutine without a GV, will create a GV even
|
|
if C<level < 0>. For an autoloaded subroutine without a stub, C<GvCV()>
|
|
of the result may be zero.
|
|
|
|
Currently, the only significant value for C<flags> is C<SVf_UTF8>.
|
|
|
|
GV* gv_fetchmeth_pvn_autoload(HV* stash,
|
|
const char* name,
|
|
STRLEN len, I32 level,
|
|
U32 flags)
|
|
|
|
=for hackers
|
|
Found in file gv.c
|
|
|
|
=item gv_fetchmeth_pv_autoload
|
|
X<gv_fetchmeth_pv_autoload>
|
|
|
|
Exactly like L</gv_fetchmeth_pvn_autoload>, but takes a nul-terminated string
|
|
instead of a string/length pair.
|
|
|
|
GV* gv_fetchmeth_pv_autoload(HV* stash,
|
|
const char* name,
|
|
I32 level, U32 flags)
|
|
|
|
=for hackers
|
|
Found in file gv.c
|
|
|
|
=item gv_fetchmeth_sv
|
|
X<gv_fetchmeth_sv>
|
|
|
|
Exactly like L</gv_fetchmeth_pvn>, but takes the name string in the form
|
|
of an SV instead of a string/length pair.
|
|
|
|
GV* gv_fetchmeth_sv(HV* stash, SV* namesv,
|
|
I32 level, U32 flags)
|
|
|
|
=for hackers
|
|
Found in file gv.c
|
|
|
|
=item gv_fetchmeth_sv_autoload
|
|
X<gv_fetchmeth_sv_autoload>
|
|
|
|
Exactly like L</gv_fetchmeth_pvn_autoload>, but takes the name string in the form
|
|
of an SV instead of a string/length pair.
|
|
|
|
GV* gv_fetchmeth_sv_autoload(HV* stash, SV* namesv,
|
|
I32 level, U32 flags)
|
|
|
|
=for hackers
|
|
Found in file gv.c
|
|
|
|
=item GvHV
|
|
X<GvHV>
|
|
|
|
Return the HV from the GV.
|
|
|
|
HV* GvHV(GV* gv)
|
|
|
|
=for hackers
|
|
Found in file gv.h
|
|
|
|
=item gv_init
|
|
X<gv_init>
|
|
|
|
The old form of C<gv_init_pvn()>. It does not work with UTF-8 strings, as it
|
|
has no flags parameter. If the C<multi> parameter is set, the
|
|
C<GV_ADDMULTI> flag will be passed to C<gv_init_pvn()>.
|
|
|
|
void gv_init(GV* gv, HV* stash, const char* name,
|
|
STRLEN len, int multi)
|
|
|
|
=for hackers
|
|
Found in file gv.c
|
|
|
|
=item gv_init_pv
|
|
X<gv_init_pv>
|
|
|
|
Same as C<gv_init_pvn()>, but takes a nul-terminated string for the name
|
|
instead of separate char * and length parameters.
|
|
|
|
void gv_init_pv(GV* gv, HV* stash, const char* name,
|
|
U32 flags)
|
|
|
|
=for hackers
|
|
Found in file gv.c
|
|
|
|
=item gv_init_pvn
|
|
X<gv_init_pvn>
|
|
|
|
Converts a scalar into a typeglob. This is an incoercible typeglob;
|
|
assigning a reference to it will assign to one of its slots, instead of
|
|
overwriting it as happens with typeglobs created by C<SvSetSV>. Converting
|
|
any scalar that is C<SvOK()> may produce unpredictable results and is reserved
|
|
for perl's internal use.
|
|
|
|
C<gv> is the scalar to be converted.
|
|
|
|
C<stash> is the parent stash/package, if any.
|
|
|
|
C<name> and C<len> give the name. The name must be unqualified;
|
|
that is, it must not include the package name. If C<gv> is a
|
|
stash element, it is the caller's responsibility to ensure that the name
|
|
passed to this function matches the name of the element. If it does not
|
|
match, perl's internal bookkeeping will get out of sync.
|
|
|
|
C<flags> can be set to C<SVf_UTF8> if C<name> is a UTF-8 string, or
|
|
the return value of SvUTF8(sv). It can also take the
|
|
C<GV_ADDMULTI> flag, which means to pretend that the GV has been
|
|
seen before (i.e., suppress "Used once" warnings).
|
|
|
|
void gv_init_pvn(GV* gv, HV* stash, const char* name,
|
|
STRLEN len, U32 flags)
|
|
|
|
=for hackers
|
|
Found in file gv.c
|
|
|
|
=item gv_init_sv
|
|
X<gv_init_sv>
|
|
|
|
Same as C<gv_init_pvn()>, but takes an SV * for the name instead of separate
|
|
char * and length parameters. C<flags> is currently unused.
|
|
|
|
void gv_init_sv(GV* gv, HV* stash, SV* namesv,
|
|
U32 flags)
|
|
|
|
=for hackers
|
|
Found in file gv.c
|
|
|
|
=item gv_stashpv
|
|
X<gv_stashpv>
|
|
|
|
Returns a pointer to the stash for a specified package. Uses C<strlen> to
|
|
determine the length of C<name>, then calls C<gv_stashpvn()>.
|
|
|
|
HV* gv_stashpv(const char* name, I32 flags)
|
|
|
|
=for hackers
|
|
Found in file gv.c
|
|
|
|
=item gv_stashpvn
|
|
X<gv_stashpvn>
|
|
|
|
Returns a pointer to the stash for a specified package. The C<namelen>
|
|
parameter indicates the length of the C<name>, in bytes. C<flags> is passed
|
|
to C<gv_fetchpvn_flags()>, so if set to C<GV_ADD> then the package will be
|
|
created if it does not already exist. If the package does not exist and
|
|
C<flags> is 0 (or any other setting that does not create packages) then C<NULL>
|
|
is returned.
|
|
|
|
Flags may be one of:
|
|
|
|
GV_ADD
|
|
SVf_UTF8
|
|
GV_NOADD_NOINIT
|
|
GV_NOINIT
|
|
GV_NOEXPAND
|
|
GV_ADDMG
|
|
|
|
The most important of which are probably C<GV_ADD> and C<SVf_UTF8>.
|
|
|
|
Note, use of C<gv_stashsv> instead of C<gv_stashpvn> where possible is strongly
|
|
recommended for performance reasons.
|
|
|
|
HV* gv_stashpvn(const char* name, U32 namelen,
|
|
I32 flags)
|
|
|
|
=for hackers
|
|
Found in file gv.c
|
|
|
|
=item gv_stashpvs
|
|
X<gv_stashpvs>
|
|
|
|
Like C<gv_stashpvn>, but takes a literal string instead of a
|
|
string/length pair.
|
|
|
|
HV* gv_stashpvs("name", I32 create)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item gv_stashsv
|
|
X<gv_stashsv>
|
|
|
|
Returns a pointer to the stash for a specified package. See
|
|
C<L</gv_stashpvn>>.
|
|
|
|
Note this interface is strongly preferred over C<gv_stashpvn> for performance
|
|
reasons.
|
|
|
|
HV* gv_stashsv(SV* sv, I32 flags)
|
|
|
|
=for hackers
|
|
Found in file gv.c
|
|
|
|
=item GvSV
|
|
X<GvSV>
|
|
|
|
Return the SV from the GV.
|
|
|
|
SV* GvSV(GV* gv)
|
|
|
|
=for hackers
|
|
Found in file gv.h
|
|
|
|
=item save_gp
|
|
X<save_gp>
|
|
|
|
Saves the current GP of gv on the save stack to be restored on scope exit.
|
|
|
|
If empty is true, replace the GP with a new GP.
|
|
|
|
If empty is false, mark gv with GVf_INTRO so the next reference
|
|
assigned is localized, which is how C< local *foo = $someref; > works.
|
|
|
|
void save_gp(GV* gv, I32 empty)
|
|
|
|
=for hackers
|
|
Found in file scope.c
|
|
|
|
=item setdefout
|
|
X<setdefout>
|
|
|
|
Sets C<PL_defoutgv>, the default file handle for output, to the passed in
|
|
typeglob. As C<PL_defoutgv> "owns" a reference on its typeglob, the reference
|
|
count of the passed in typeglob is increased by one, and the reference count
|
|
of the typeglob that C<PL_defoutgv> points to is decreased by one.
|
|
|
|
void setdefout(GV* gv)
|
|
|
|
=for hackers
|
|
Found in file pp_sys.c
|
|
|
|
|
|
=back
|
|
|
|
=head1 Handy Values
|
|
|
|
=over 8
|
|
|
|
=item C_ARRAY_END
|
|
X<C_ARRAY_END>
|
|
|
|
Returns a pointer to one element past the final element of the input C array.
|
|
|
|
void * C_ARRAY_END(void *a)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item C_ARRAY_LENGTH
|
|
X<C_ARRAY_LENGTH>
|
|
|
|
Returns the number of elements in the input C array (so you want your
|
|
zero-based indices to be less than but not equal to).
|
|
|
|
STRLEN C_ARRAY_LENGTH(void *a)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item cBOOL
|
|
X<cBOOL>
|
|
|
|
Cast-to-bool. A simple S<C<(bool) I<expr>>> cast may not do the right thing:
|
|
if C<bool> is defined as C<char>, for example, then the cast from C<int> is
|
|
implementation-defined.
|
|
|
|
C<(bool)!!(cbool)> in a ternary triggers a bug in xlc on AIX
|
|
|
|
bool cBOOL(bool expr)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item Nullav
|
|
X<Nullav>
|
|
|
|
|
|
DEPRECATED! It is planned to remove this function from a
|
|
future release of Perl. Do not use it for new code; remove it from
|
|
existing code.
|
|
|
|
|
|
Null AV pointer.
|
|
|
|
(deprecated - use C<(AV *)NULL> instead)
|
|
|
|
=for hackers
|
|
Found in file av.h
|
|
|
|
=item Nullch
|
|
X<Nullch>
|
|
|
|
Null character pointer. (No longer available when C<PERL_CORE> is
|
|
defined.)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item Nullcv
|
|
X<Nullcv>
|
|
|
|
|
|
DEPRECATED! It is planned to remove this function from a
|
|
future release of Perl. Do not use it for new code; remove it from
|
|
existing code.
|
|
|
|
|
|
Null CV pointer.
|
|
|
|
(deprecated - use C<(CV *)NULL> instead)
|
|
|
|
=for hackers
|
|
Found in file cv.h
|
|
|
|
=item Nullhv
|
|
X<Nullhv>
|
|
|
|
|
|
DEPRECATED! It is planned to remove this function from a
|
|
future release of Perl. Do not use it for new code; remove it from
|
|
existing code.
|
|
|
|
|
|
Null HV pointer.
|
|
|
|
(deprecated - use C<(HV *)NULL> instead)
|
|
|
|
=for hackers
|
|
Found in file hv.h
|
|
|
|
=item Nullsv
|
|
X<Nullsv>
|
|
|
|
Null SV pointer. (No longer available when C<PERL_CORE> is defined.)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item STR_WITH_LEN
|
|
X<STR_WITH_LEN>
|
|
|
|
Returns two comma separated tokens of the input literal string, and its length.
|
|
This is convenience macro which helps out in some API calls.
|
|
Note that it can't be used as an argument to macros or functions that under
|
|
some configurations might be macros, which means that it requires the full
|
|
Perl_xxx(aTHX_ ...) form for any API calls where it's used.
|
|
|
|
pair STR_WITH_LEN("literal string")
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item __ASSERT_
|
|
X<__ASSERT_>
|
|
|
|
This is a helper macro to avoid preprocessor issues, replaced by nothing
|
|
unless under DEBUGGING, where it expands to an assert of its argument,
|
|
followed by a comma (hence the comma operator). If we just used a straight
|
|
assert(), we would get a comma with nothing before it when not DEBUGGING.
|
|
|
|
void __ASSERT_(bool expr)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
|
|
=back
|
|
|
|
=head1 Hash Manipulation Functions
|
|
|
|
A HV structure represents a Perl hash. It consists mainly of an array
|
|
of pointers, each of which points to a linked list of HE structures. The
|
|
array is indexed by the hash function of the key, so each linked list
|
|
represents all the hash entries with the same hash value. Each HE contains
|
|
a pointer to the actual value, plus a pointer to a HEK structure which
|
|
holds the key and hash value.
|
|
|
|
|
|
=over 8
|
|
|
|
=item cop_fetch_label
|
|
X<cop_fetch_label>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Returns the label attached to a cop, and stores its length in bytes into
|
|
C<*len>.
|
|
Upon return, C<*flags> will be set to either C<SVf_UTF8> or 0.
|
|
|
|
Alternatively, use the macro L</C<CopLABEL_len_flags>>;
|
|
or if you don't need to know if the label is UTF-8 or not, the macro
|
|
L</C<CopLABEL_len>>;
|
|
or if you additionally dont need to know the length, L</C<CopLABEL>>.
|
|
|
|
const char * cop_fetch_label(COP *const cop,
|
|
STRLEN *len, U32 *flags)
|
|
|
|
=for hackers
|
|
Found in file hv.c
|
|
|
|
=item cop_store_label
|
|
X<cop_store_label>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Save a label into a C<cop_hints_hash>.
|
|
You need to set flags to C<SVf_UTF8>
|
|
for a UTF-8 label. Any other flag is ignored.
|
|
|
|
void cop_store_label(COP *const cop,
|
|
const char *label, STRLEN len,
|
|
U32 flags)
|
|
|
|
=for hackers
|
|
Found in file hv.c
|
|
|
|
=item get_hv
|
|
X<get_hv>
|
|
|
|
Returns the HV of the specified Perl hash. C<flags> are passed to
|
|
C<gv_fetchpv>. If C<GV_ADD> is set and the
|
|
Perl variable does not exist then it will be created. If C<flags> is zero
|
|
and the variable does not exist then C<NULL> is returned.
|
|
|
|
NOTE: the perl_ form of this function is deprecated.
|
|
|
|
HV* get_hv(const char *name, I32 flags)
|
|
|
|
=for hackers
|
|
Found in file perl.c
|
|
|
|
=item HEf_SVKEY
|
|
X<HEf_SVKEY>
|
|
|
|
This flag, used in the length slot of hash entries and magic structures,
|
|
specifies the structure contains an C<SV*> pointer where a C<char*> pointer
|
|
is to be expected. (For information only--not to be used).
|
|
|
|
=for hackers
|
|
Found in file hv.h
|
|
|
|
=item HeHASH
|
|
X<HeHASH>
|
|
|
|
Returns the computed hash stored in the hash entry.
|
|
|
|
U32 HeHASH(HE* he)
|
|
|
|
=for hackers
|
|
Found in file hv.h
|
|
|
|
=item HeKEY
|
|
X<HeKEY>
|
|
|
|
Returns the actual pointer stored in the key slot of the hash entry. The
|
|
pointer may be either C<char*> or C<SV*>, depending on the value of
|
|
C<HeKLEN()>. Can be assigned to. The C<HePV()> or C<HeSVKEY()> macros are
|
|
usually preferable for finding the value of a key.
|
|
|
|
void* HeKEY(HE* he)
|
|
|
|
=for hackers
|
|
Found in file hv.h
|
|
|
|
=item HeKLEN
|
|
X<HeKLEN>
|
|
|
|
If this is negative, and amounts to C<HEf_SVKEY>, it indicates the entry
|
|
holds an C<SV*> key. Otherwise, holds the actual length of the key. Can
|
|
be assigned to. The C<HePV()> macro is usually preferable for finding key
|
|
lengths.
|
|
|
|
STRLEN HeKLEN(HE* he)
|
|
|
|
=for hackers
|
|
Found in file hv.h
|
|
|
|
=item HePV
|
|
X<HePV>
|
|
|
|
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<PL_na>, though this is rather less efficient than using a local
|
|
variable. 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 this document. See also C<L</HeUTF8>>.
|
|
|
|
If you are using C<HePV> to get values to pass to C<newSVpvn()> to create a
|
|
new SV, you should consider using C<newSVhek(HeKEY_hek(he))> as it is more
|
|
efficient.
|
|
|
|
char* HePV(HE* he, STRLEN len)
|
|
|
|
=for hackers
|
|
Found in file hv.h
|
|
|
|
=item HeSVKEY
|
|
X<HeSVKEY>
|
|
|
|
Returns the key as an C<SV*>, or C<NULL> if the hash entry does not
|
|
contain an C<SV*> key.
|
|
|
|
SV* HeSVKEY(HE* he)
|
|
|
|
=for hackers
|
|
Found in file hv.h
|
|
|
|
=item HeSVKEY_force
|
|
X<HeSVKEY_force>
|
|
|
|
Returns the key as an C<SV*>. Will create and return a temporary mortal
|
|
C<SV*> if the hash entry contains only a C<char*> key.
|
|
|
|
SV* HeSVKEY_force(HE* he)
|
|
|
|
=for hackers
|
|
Found in file hv.h
|
|
|
|
=item HeSVKEY_set
|
|
X<HeSVKEY_set>
|
|
|
|
Sets the key to a given C<SV*>, taking care to set the appropriate flags to
|
|
indicate the presence of an C<SV*> key, and returns the same
|
|
C<SV*>.
|
|
|
|
SV* HeSVKEY_set(HE* he, SV* sv)
|
|
|
|
=for hackers
|
|
Found in file hv.h
|
|
|
|
=item HeUTF8
|
|
X<HeUTF8>
|
|
|
|
Returns whether the C<char *> value returned by C<HePV> is encoded in UTF-8,
|
|
doing any necessary dereferencing of possibly C<SV*> keys. The value returned
|
|
will be 0 or non-0, not necessarily 1 (or even a value with any low bits set),
|
|
so B<do not> blindly assign this to a C<bool> variable, as C<bool> may be a
|
|
typedef for C<char>.
|
|
|
|
U32 HeUTF8(HE* he)
|
|
|
|
=for hackers
|
|
Found in file hv.h
|
|
|
|
=item HeVAL
|
|
X<HeVAL>
|
|
|
|
Returns the value slot (type C<SV*>)
|
|
stored in the hash entry. Can be assigned
|
|
to.
|
|
|
|
SV *foo= HeVAL(hv);
|
|
HeVAL(hv)= sv;
|
|
|
|
|
|
SV* HeVAL(HE* he)
|
|
|
|
=for hackers
|
|
Found in file hv.h
|
|
|
|
=item hv_assert
|
|
X<hv_assert>
|
|
|
|
Check that a hash is in an internally consistent state.
|
|
|
|
NOTE: this function must be explicitly called as Perl_hv_assert with an aTHX_ parameter.
|
|
|
|
void Perl_hv_assert(pTHX_ HV *hv)
|
|
|
|
=for hackers
|
|
Found in file hv.c
|
|
|
|
=item hv_bucket_ratio
|
|
X<hv_bucket_ratio>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
If the hash is tied dispatches through to the SCALAR tied method,
|
|
otherwise if the hash contains no keys returns 0, otherwise returns
|
|
a mortal sv containing a string specifying the number of used buckets,
|
|
followed by a slash, followed by the number of available buckets.
|
|
|
|
This function is expensive, it must scan all of the buckets
|
|
to determine which are used, and the count is NOT cached.
|
|
In a large hash this could be a lot of buckets.
|
|
|
|
SV* hv_bucket_ratio(HV *hv)
|
|
|
|
=for hackers
|
|
Found in file hv.c
|
|
|
|
=item hv_clear
|
|
X<hv_clear>
|
|
|
|
Frees the all the elements of a hash, leaving it empty.
|
|
The XS equivalent of C<%hash = ()>. See also L</hv_undef>.
|
|
|
|
See L</av_clear> for a note about the hash possibly being invalid on
|
|
return.
|
|
|
|
void hv_clear(HV *hv)
|
|
|
|
=for hackers
|
|
Found in file hv.c
|
|
|
|
=item hv_clear_placeholders
|
|
X<hv_clear_placeholders>
|
|
|
|
Clears any placeholders from a hash. If a restricted hash has any of its keys
|
|
marked as readonly and the key is subsequently deleted, the key is not actually
|
|
deleted but is marked by assigning it a value of C<&PL_sv_placeholder>. This tags
|
|
it so it will be ignored by future operations such as iterating over the hash,
|
|
but will still allow the hash to have a value reassigned to the key at some
|
|
future point. This function clears any such placeholder keys from the hash.
|
|
See C<L<Hash::Util::lock_keys()|Hash::Util/lock_keys>> for an example of its
|
|
use.
|
|
|
|
void hv_clear_placeholders(HV *hv)
|
|
|
|
=for hackers
|
|
Found in file hv.c
|
|
|
|
=item hv_copy_hints_hv
|
|
X<hv_copy_hints_hv>
|
|
|
|
A specialised version of L</newHVhv> for copying C<%^H>. C<ohv> must be
|
|
a pointer to a hash (which may have C<%^H> magic, but should be generally
|
|
non-magical), or C<NULL> (interpreted as an empty hash). The content
|
|
of C<ohv> is copied to a new hash, which has the C<%^H>-specific magic
|
|
added to it. A pointer to the new hash is returned.
|
|
|
|
HV * hv_copy_hints_hv(HV *const ohv)
|
|
|
|
=for hackers
|
|
Found in file hv.c
|
|
|
|
=item hv_delete
|
|
X<hv_delete>
|
|
|
|
Deletes a key/value pair in the hash. The value's SV is removed from
|
|
the hash, made mortal, and returned to the caller. The absolute
|
|
value of C<klen> is the length of the key. If C<klen> is negative the
|
|
key is assumed to be in UTF-8-encoded Unicode. The C<flags> value
|
|
will normally be zero; if set to C<G_DISCARD> then C<NULL> will be returned.
|
|
C<NULL> will also be returned if the key is not found.
|
|
|
|
SV* hv_delete(HV *hv, const char *key, I32 klen,
|
|
I32 flags)
|
|
|
|
=for hackers
|
|
Found in file hv.c
|
|
|
|
=item hv_delete_ent
|
|
X<hv_delete_ent>
|
|
|
|
Deletes a key/value pair in the hash. The value SV is removed from the hash,
|
|
made mortal, and returned to the caller. The C<flags> value will normally be
|
|
zero; if set to C<G_DISCARD> then C<NULL> will be returned. C<NULL> will also
|
|
be returned if the key is not found. C<hash> can be a valid precomputed hash
|
|
value, or 0 to ask for it to be computed.
|
|
|
|
SV* hv_delete_ent(HV *hv, SV *keysv, I32 flags,
|
|
U32 hash)
|
|
|
|
=for hackers
|
|
Found in file hv.c
|
|
|
|
=item HvENAME
|
|
X<HvENAME>
|
|
|
|
Returns the effective name of a stash, or NULL if there is none. The
|
|
effective name represents a location in the symbol table where this stash
|
|
resides. It is updated automatically when packages are aliased or deleted.
|
|
A stash that is no longer in the symbol table has no effective name. This
|
|
name is preferable to C<HvNAME> for use in MRO linearisations and isa
|
|
caches.
|
|
|
|
char* HvENAME(HV* stash)
|
|
|
|
=for hackers
|
|
Found in file hv.h
|
|
|
|
=item HvENAMELEN
|
|
X<HvENAMELEN>
|
|
|
|
Returns the length of the stash's effective name.
|
|
|
|
STRLEN HvENAMELEN(HV *stash)
|
|
|
|
=for hackers
|
|
Found in file hv.h
|
|
|
|
=item HvENAMEUTF8
|
|
X<HvENAMEUTF8>
|
|
|
|
Returns true if the effective name is in UTF-8 encoding.
|
|
|
|
unsigned char HvENAMEUTF8(HV *stash)
|
|
|
|
=for hackers
|
|
Found in file hv.h
|
|
|
|
=item hv_exists
|
|
X<hv_exists>
|
|
|
|
Returns a boolean indicating whether the specified hash key exists. The
|
|
absolute value of C<klen> is the length of the key. If C<klen> is
|
|
negative the key is assumed to be in UTF-8-encoded Unicode.
|
|
|
|
bool hv_exists(HV *hv, const char *key, I32 klen)
|
|
|
|
=for hackers
|
|
Found in file hv.c
|
|
|
|
=item hv_exists_ent
|
|
X<hv_exists_ent>
|
|
|
|
Returns a boolean indicating whether
|
|
the specified hash key exists. C<hash>
|
|
can be a valid precomputed hash value, or 0 to ask for it to be
|
|
computed.
|
|
|
|
bool hv_exists_ent(HV *hv, SV *keysv, U32 hash)
|
|
|
|
=for hackers
|
|
Found in file hv.c
|
|
|
|
=item hv_fetch
|
|
X<hv_fetch>
|
|
|
|
Returns the SV which corresponds to the specified key in the hash.
|
|
The absolute value of C<klen> is the length of the key. If C<klen> is
|
|
negative the key is assumed to be in UTF-8-encoded Unicode. If
|
|
C<lval> is set then the fetch will be part of a store. This means that if
|
|
there is no value in the hash associated with the given key, then one is
|
|
created and a pointer to it is returned. The C<SV*> it points to can be
|
|
assigned to. But always check that the
|
|
return value is non-null before dereferencing it to an C<SV*>.
|
|
|
|
See L<perlguts/"Understanding the Magic of Tied Hashes and Arrays"> for more
|
|
information on how to use this function on tied hashes.
|
|
|
|
SV** hv_fetch(HV *hv, const char *key, I32 klen,
|
|
I32 lval)
|
|
|
|
=for hackers
|
|
Found in file hv.c
|
|
|
|
=item hv_fetchs
|
|
X<hv_fetchs>
|
|
|
|
Like C<hv_fetch>, but takes a literal string instead of a
|
|
string/length pair.
|
|
|
|
SV** hv_fetchs(HV* tb, "key", I32 lval)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item hv_fetch_ent
|
|
X<hv_fetch_ent>
|
|
|
|
Returns the hash entry which corresponds to the specified key in the hash.
|
|
C<hash> must be a valid precomputed hash number for the given C<key>, or 0
|
|
if you want the function to compute it. IF C<lval> is set then the fetch
|
|
will be part of a store. Make sure the return value is non-null before
|
|
accessing it. The return value when C<hv> is a tied hash is a pointer to a
|
|
static location, so be sure to make a copy of the structure if you need to
|
|
store it somewhere.
|
|
|
|
See L<perlguts/"Understanding the Magic of Tied Hashes and Arrays"> for more
|
|
information on how to use this function on tied hashes.
|
|
|
|
HE* hv_fetch_ent(HV *hv, SV *keysv, I32 lval,
|
|
U32 hash)
|
|
|
|
=for hackers
|
|
Found in file hv.c
|
|
|
|
=item HvFILL
|
|
X<HvFILL>
|
|
|
|
See L</hv_fill>.
|
|
|
|
STRLEN HvFILL(HV *const hv)
|
|
|
|
=for hackers
|
|
Found in file hv.h
|
|
|
|
=item hv_fill
|
|
X<hv_fill>
|
|
|
|
Returns the number of hash buckets that happen to be in use.
|
|
|
|
This function is wrapped by the macro C<HvFILL>.
|
|
|
|
As of perl 5.25 this function is used only for debugging
|
|
purposes, and the number of used hash buckets is not
|
|
in any way cached, thus this function can be costly
|
|
to execute as it must iterate over all the buckets in the
|
|
hash.
|
|
|
|
NOTE: this function must be explicitly called as Perl_hv_fill with an aTHX_ parameter.
|
|
|
|
STRLEN Perl_hv_fill(pTHX_ HV *const hv)
|
|
|
|
=for hackers
|
|
Found in file hv.c
|
|
|
|
=item hv_iterinit
|
|
X<hv_iterinit>
|
|
|
|
Prepares a starting point to traverse a hash table. Returns the number of
|
|
keys in the hash, including placeholders (i.e. the same as C<HvTOTALKEYS(hv)>).
|
|
The return value is currently only meaningful for hashes without tie magic.
|
|
|
|
NOTE: Before version 5.004_65, C<hv_iterinit> used to return the number of
|
|
hash buckets that happen to be in use. If you still need that esoteric
|
|
value, you can get it through the macro C<HvFILL(hv)>.
|
|
|
|
|
|
I32 hv_iterinit(HV *hv)
|
|
|
|
=for hackers
|
|
Found in file hv.c
|
|
|
|
=item hv_iterkey
|
|
X<hv_iterkey>
|
|
|
|
Returns the key from the current position of the hash iterator. See
|
|
C<L</hv_iterinit>>.
|
|
|
|
char* hv_iterkey(HE* entry, I32* retlen)
|
|
|
|
=for hackers
|
|
Found in file hv.c
|
|
|
|
=item hv_iterkeysv
|
|
X<hv_iterkeysv>
|
|
|
|
Returns the key as an C<SV*> from the current position of the hash
|
|
iterator. The return value will always be a mortal copy of the key. Also
|
|
see C<L</hv_iterinit>>.
|
|
|
|
SV* hv_iterkeysv(HE* entry)
|
|
|
|
=for hackers
|
|
Found in file hv.c
|
|
|
|
=item hv_iternext
|
|
X<hv_iternext>
|
|
|
|
Returns entries from a hash iterator. See C<L</hv_iterinit>>.
|
|
|
|
You may call C<hv_delete> or C<hv_delete_ent> on the hash entry that the
|
|
iterator currently points to, without losing your place or invalidating your
|
|
iterator. Note that in this case the current entry is deleted from the hash
|
|
with your iterator holding the last reference to it. Your iterator is flagged
|
|
to free the entry on the next call to C<hv_iternext>, so you must not discard
|
|
your iterator immediately else the entry will leak - call C<hv_iternext> to
|
|
trigger the resource deallocation.
|
|
|
|
HE* hv_iternext(HV *hv)
|
|
|
|
=for hackers
|
|
Found in file hv.c
|
|
|
|
=item hv_iternextsv
|
|
X<hv_iternextsv>
|
|
|
|
Performs an C<hv_iternext>, C<hv_iterkey>, and C<hv_iterval> in one
|
|
operation.
|
|
|
|
SV* hv_iternextsv(HV *hv, char **key, I32 *retlen)
|
|
|
|
=for hackers
|
|
Found in file hv.c
|
|
|
|
=item hv_iternext_flags
|
|
X<hv_iternext_flags>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Returns entries from a hash iterator. See C<L</hv_iterinit>> and
|
|
C<L</hv_iternext>>.
|
|
The C<flags> value will normally be zero; if C<HV_ITERNEXT_WANTPLACEHOLDERS> is
|
|
set the placeholders keys (for restricted hashes) will be returned in addition
|
|
to normal keys. By default placeholders are automatically skipped over.
|
|
Currently a placeholder is implemented with a value that is
|
|
C<&PL_sv_placeholder>. Note that the implementation of placeholders and
|
|
restricted hashes may change, and the implementation currently is
|
|
insufficiently abstracted for any change to be tidy.
|
|
|
|
HE* hv_iternext_flags(HV *hv, I32 flags)
|
|
|
|
=for hackers
|
|
Found in file hv.c
|
|
|
|
=item hv_iterval
|
|
X<hv_iterval>
|
|
|
|
Returns the value from the current position of the hash iterator. See
|
|
C<L</hv_iterkey>>.
|
|
|
|
SV* hv_iterval(HV *hv, HE *entry)
|
|
|
|
=for hackers
|
|
Found in file hv.c
|
|
|
|
=item hv_magic
|
|
X<hv_magic>
|
|
|
|
Adds magic to a hash. See C<L</sv_magic>>.
|
|
|
|
void hv_magic(HV *hv, GV *gv, int how)
|
|
|
|
=for hackers
|
|
Found in file hv.c
|
|
|
|
=item HvNAME
|
|
X<HvNAME>
|
|
|
|
Returns the package name of a stash, or C<NULL> if C<stash> isn't a stash.
|
|
See C<L</SvSTASH>>, C<L</CvSTASH>>.
|
|
|
|
char* HvNAME(HV* stash)
|
|
|
|
=for hackers
|
|
Found in file hv.h
|
|
|
|
=item HvNAMELEN
|
|
X<HvNAMELEN>
|
|
|
|
Returns the length of the stash's name.
|
|
|
|
STRLEN HvNAMELEN(HV *stash)
|
|
|
|
=for hackers
|
|
Found in file hv.h
|
|
|
|
=item HvNAMEUTF8
|
|
X<HvNAMEUTF8>
|
|
|
|
Returns true if the name is in UTF-8 encoding.
|
|
|
|
unsigned char HvNAMEUTF8(HV *stash)
|
|
|
|
=for hackers
|
|
Found in file hv.h
|
|
|
|
=item hv_scalar
|
|
X<hv_scalar>
|
|
|
|
Evaluates the hash in scalar context and returns the result.
|
|
|
|
When the hash is tied dispatches through to the SCALAR method,
|
|
otherwise returns a mortal SV containing the number of keys
|
|
in the hash.
|
|
|
|
Note, prior to 5.25 this function returned what is now
|
|
returned by the hv_bucket_ratio() function.
|
|
|
|
SV* hv_scalar(HV *hv)
|
|
|
|
=for hackers
|
|
Found in file hv.c
|
|
|
|
=item hv_store
|
|
X<hv_store>
|
|
|
|
Stores an SV in a hash. The hash key is specified as C<key> and the
|
|
absolute value of C<klen> is the length of the key. If C<klen> is
|
|
negative the key is assumed to be in UTF-8-encoded Unicode. The
|
|
C<hash> parameter is the precomputed hash value; if it is zero then
|
|
Perl will compute it.
|
|
|
|
The return value will be
|
|
C<NULL> if the operation failed or if the value did not need to be actually
|
|
stored within the hash (as in the case of tied hashes). Otherwise it can
|
|
be dereferenced to get the original C<SV*>. Note that the caller is
|
|
responsible for suitably incrementing the reference count of C<val> before
|
|
the call, and decrementing it if the function returned C<NULL>. Effectively
|
|
a successful C<hv_store> takes ownership of one reference to C<val>. This is
|
|
usually what you want; a newly created SV has a reference count of one, so
|
|
if all your code does is create SVs then store them in a hash, C<hv_store>
|
|
will own the only reference to the new SV, and your code doesn't need to do
|
|
anything further to tidy up. C<hv_store> is not implemented as a call to
|
|
C<hv_store_ent>, and does not create a temporary SV for the key, so if your
|
|
key data is not already in SV form then use C<hv_store> in preference to
|
|
C<hv_store_ent>.
|
|
|
|
See L<perlguts/"Understanding the Magic of Tied Hashes and Arrays"> for more
|
|
information on how to use this function on tied hashes.
|
|
|
|
SV** hv_store(HV *hv, const char *key, I32 klen,
|
|
SV *val, U32 hash)
|
|
|
|
=for hackers
|
|
Found in file hv.c
|
|
|
|
=item hv_stores
|
|
X<hv_stores>
|
|
|
|
Like C<hv_store>, but takes a literal string instead of a
|
|
string/length pair
|
|
and omits the hash parameter.
|
|
|
|
SV** hv_stores(HV* tb, "key", SV* val)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item hv_store_ent
|
|
X<hv_store_ent>
|
|
|
|
Stores C<val> in a hash. The hash key is specified as C<key>. The C<hash>
|
|
parameter is the precomputed hash value; if it is zero then Perl will
|
|
compute it. The return value is the new hash entry so created. It will be
|
|
C<NULL> if the operation failed or if the value did not need to be actually
|
|
stored within the hash (as in the case of tied hashes). Otherwise the
|
|
contents of the return value can be accessed using the C<He?> macros
|
|
described here. Note that the caller is responsible for suitably
|
|
incrementing the reference count of C<val> before the call, and
|
|
decrementing it if the function returned NULL. Effectively a successful
|
|
C<hv_store_ent> takes ownership of one reference to C<val>. This is
|
|
usually what you want; a newly created SV has a reference count of one, so
|
|
if all your code does is create SVs then store them in a hash, C<hv_store>
|
|
will own the only reference to the new SV, and your code doesn't need to do
|
|
anything further to tidy up. Note that C<hv_store_ent> only reads the C<key>;
|
|
unlike C<val> it does not take ownership of it, so maintaining the correct
|
|
reference count on C<key> is entirely the caller's responsibility. The reason
|
|
it does not take ownership, is that C<key> is not used after this function
|
|
returns, and so can be freed immediately. C<hv_store>
|
|
is not implemented as a call to C<hv_store_ent>, and does not create a temporary
|
|
SV for the key, so if your key data is not already in SV form then use
|
|
C<hv_store> in preference to C<hv_store_ent>.
|
|
|
|
See L<perlguts/"Understanding the Magic of Tied Hashes and Arrays"> for more
|
|
information on how to use this function on tied hashes.
|
|
|
|
HE* hv_store_ent(HV *hv, SV *key, SV *val, U32 hash)
|
|
|
|
=for hackers
|
|
Found in file hv.c
|
|
|
|
=item hv_undef
|
|
X<hv_undef>
|
|
|
|
Undefines the hash. The XS equivalent of C<undef(%hash)>.
|
|
|
|
As well as freeing all the elements of the hash (like C<hv_clear()>), this
|
|
also frees any auxiliary data and storage associated with the hash.
|
|
|
|
See L</av_clear> for a note about the hash possibly being invalid on
|
|
return.
|
|
|
|
void hv_undef(HV *hv)
|
|
|
|
=for hackers
|
|
Found in file hv.c
|
|
|
|
=item newHV
|
|
X<newHV>
|
|
|
|
Creates a new HV. The reference count is set to 1.
|
|
|
|
HV* newHV()
|
|
|
|
=for hackers
|
|
Found in file hv.h
|
|
|
|
|
|
=back
|
|
|
|
=head1 Hook manipulation
|
|
|
|
These functions provide convenient and thread-safe means of manipulating
|
|
hook variables.
|
|
|
|
|
|
=over 8
|
|
|
|
=item wrap_op_checker
|
|
X<wrap_op_checker>
|
|
|
|
Puts a C function into the chain of check functions for a specified op
|
|
type. This is the preferred way to manipulate the L</PL_check> array.
|
|
C<opcode> specifies which type of op is to be affected. C<new_checker>
|
|
is a pointer to the C function that is to be added to that opcode's
|
|
check chain, and C<old_checker_p> points to the storage location where a
|
|
pointer to the next function in the chain will be stored. The value of
|
|
C<new_checker> is written into the L</PL_check> array, while the value
|
|
previously stored there is written to C<*old_checker_p>.
|
|
|
|
L</PL_check> is global to an entire process, and a module wishing to
|
|
hook op checking may find itself invoked more than once per process,
|
|
typically in different threads. To handle that situation, this function
|
|
is idempotent. The location C<*old_checker_p> must initially (once
|
|
per process) contain a null pointer. A C variable of static duration
|
|
(declared at file scope, typically also marked C<static> to give
|
|
it internal linkage) will be implicitly initialised appropriately,
|
|
if it does not have an explicit initialiser. This function will only
|
|
actually modify the check chain if it finds C<*old_checker_p> to be null.
|
|
This function is also thread safe on the small scale. It uses appropriate
|
|
locking to avoid race conditions in accessing L</PL_check>.
|
|
|
|
When this function is called, the function referenced by C<new_checker>
|
|
must be ready to be called, except for C<*old_checker_p> being unfilled.
|
|
In a threading situation, C<new_checker> may be called immediately,
|
|
even before this function has returned. C<*old_checker_p> will always
|
|
be appropriately set before C<new_checker> is called. If C<new_checker>
|
|
decides not to do anything special with an op that it is given (which
|
|
is the usual case for most uses of op check hooking), it must chain the
|
|
check function referenced by C<*old_checker_p>.
|
|
|
|
Taken all together, XS code to hook an op checker should typically look
|
|
something like this:
|
|
|
|
static Perl_check_t nxck_frob;
|
|
static OP *myck_frob(pTHX_ OP *op) {
|
|
...
|
|
op = nxck_frob(aTHX_ op);
|
|
...
|
|
return op;
|
|
}
|
|
BOOT:
|
|
wrap_op_checker(OP_FROB, myck_frob, &nxck_frob);
|
|
|
|
If you want to influence compilation of calls to a specific subroutine,
|
|
then use L</cv_set_call_checker_flags> rather than hooking checking of
|
|
all C<entersub> ops.
|
|
|
|
void wrap_op_checker(Optype opcode,
|
|
Perl_check_t new_checker,
|
|
Perl_check_t *old_checker_p)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
|
|
=back
|
|
|
|
=head1 Lexer interface
|
|
|
|
This is the lower layer of the Perl parser, managing characters and tokens.
|
|
|
|
|
|
=over 8
|
|
|
|
=item lex_bufutf8
|
|
X<lex_bufutf8>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Indicates whether the octets in the lexer buffer
|
|
(L</PL_parser-E<gt>linestr>) should be interpreted as the UTF-8 encoding
|
|
of Unicode characters. If not, they should be interpreted as Latin-1
|
|
characters. This is analogous to the C<SvUTF8> flag for scalars.
|
|
|
|
In UTF-8 mode, it is not guaranteed that the lexer buffer actually
|
|
contains valid UTF-8. Lexing code must be robust in the face of invalid
|
|
encoding.
|
|
|
|
The actual C<SvUTF8> flag of the L</PL_parser-E<gt>linestr> scalar
|
|
is significant, but not the whole story regarding the input character
|
|
encoding. Normally, when a file is being read, the scalar contains octets
|
|
and its C<SvUTF8> flag is off, but the octets should be interpreted as
|
|
UTF-8 if the C<use utf8> pragma is in effect. During a string eval,
|
|
however, the scalar may have the C<SvUTF8> flag on, and in this case its
|
|
octets should be interpreted as UTF-8 unless the C<use bytes> pragma
|
|
is in effect. This logic may change in the future; use this function
|
|
instead of implementing the logic yourself.
|
|
|
|
bool lex_bufutf8()
|
|
|
|
=for hackers
|
|
Found in file toke.c
|
|
|
|
=item lex_discard_to
|
|
X<lex_discard_to>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Discards the first part of the L</PL_parser-E<gt>linestr> buffer,
|
|
up to C<ptr>. The remaining content of the buffer will be moved, and
|
|
all pointers into the buffer updated appropriately. C<ptr> must not
|
|
be later in the buffer than the position of L</PL_parser-E<gt>bufptr>:
|
|
it is not permitted to discard text that has yet to be lexed.
|
|
|
|
Normally it is not necessarily to do this directly, because it suffices to
|
|
use the implicit discarding behaviour of L</lex_next_chunk> and things
|
|
based on it. However, if a token stretches across multiple lines,
|
|
and the lexing code has kept multiple lines of text in the buffer for
|
|
that purpose, then after completion of the token it would be wise to
|
|
explicitly discard the now-unneeded earlier lines, to avoid future
|
|
multi-line tokens growing the buffer without bound.
|
|
|
|
void lex_discard_to(char* ptr)
|
|
|
|
=for hackers
|
|
Found in file toke.c
|
|
|
|
=item lex_grow_linestr
|
|
X<lex_grow_linestr>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Reallocates the lexer buffer (L</PL_parser-E<gt>linestr>) to accommodate
|
|
at least C<len> octets (including terminating C<NUL>). Returns a
|
|
pointer to the reallocated buffer. This is necessary before making
|
|
any direct modification of the buffer that would increase its length.
|
|
L</lex_stuff_pvn> provides a more convenient way to insert text into
|
|
the buffer.
|
|
|
|
Do not use C<SvGROW> or C<sv_grow> directly on C<PL_parser-E<gt>linestr>;
|
|
this function updates all of the lexer's variables that point directly
|
|
into the buffer.
|
|
|
|
char* lex_grow_linestr(STRLEN len)
|
|
|
|
=for hackers
|
|
Found in file toke.c
|
|
|
|
=item lex_next_chunk
|
|
X<lex_next_chunk>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Reads in the next chunk of text to be lexed, appending it to
|
|
L</PL_parser-E<gt>linestr>. This should be called when lexing code has
|
|
looked to the end of the current chunk and wants to know more. It is
|
|
usual, but not necessary, for lexing to have consumed the entirety of
|
|
the current chunk at this time.
|
|
|
|
If L</PL_parser-E<gt>bufptr> is pointing to the very end of the current
|
|
chunk (i.e., the current chunk has been entirely consumed), normally the
|
|
current chunk will be discarded at the same time that the new chunk is
|
|
read in. If C<flags> has the C<LEX_KEEP_PREVIOUS> bit set, the current chunk
|
|
will not be discarded. If the current chunk has not been entirely
|
|
consumed, then it will not be discarded regardless of the flag.
|
|
|
|
Returns true if some new text was added to the buffer, or false if the
|
|
buffer has reached the end of the input text.
|
|
|
|
bool lex_next_chunk(U32 flags)
|
|
|
|
=for hackers
|
|
Found in file toke.c
|
|
|
|
=item lex_peek_unichar
|
|
X<lex_peek_unichar>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Looks ahead one (Unicode) character in the text currently being lexed.
|
|
Returns the codepoint (unsigned integer value) of the next character,
|
|
or -1 if lexing has reached the end of the input text. To consume the
|
|
peeked character, use L</lex_read_unichar>.
|
|
|
|
If the next character is in (or extends into) the next chunk of input
|
|
text, the next chunk will be read in. Normally the current chunk will be
|
|
discarded at the same time, but if C<flags> has the C<LEX_KEEP_PREVIOUS>
|
|
bit set, then the current chunk will not be discarded.
|
|
|
|
If the input is being interpreted as UTF-8 and a UTF-8 encoding error
|
|
is encountered, an exception is generated.
|
|
|
|
I32 lex_peek_unichar(U32 flags)
|
|
|
|
=for hackers
|
|
Found in file toke.c
|
|
|
|
=item lex_read_space
|
|
X<lex_read_space>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Reads optional spaces, in Perl style, in the text currently being
|
|
lexed. The spaces may include ordinary whitespace characters and
|
|
Perl-style comments. C<#line> directives are processed if encountered.
|
|
L</PL_parser-E<gt>bufptr> is moved past the spaces, so that it points
|
|
at a non-space character (or the end of the input text).
|
|
|
|
If spaces extend into the next chunk of input text, the next chunk will
|
|
be read in. Normally the current chunk will be discarded at the same
|
|
time, but if C<flags> has the C<LEX_KEEP_PREVIOUS> bit set, then the current
|
|
chunk will not be discarded.
|
|
|
|
void lex_read_space(U32 flags)
|
|
|
|
=for hackers
|
|
Found in file toke.c
|
|
|
|
=item lex_read_to
|
|
X<lex_read_to>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Consume text in the lexer buffer, from L</PL_parser-E<gt>bufptr> up
|
|
to C<ptr>. This advances L</PL_parser-E<gt>bufptr> to match C<ptr>,
|
|
performing the correct bookkeeping whenever a newline character is passed.
|
|
This is the normal way to consume lexed text.
|
|
|
|
Interpretation of the buffer's octets can be abstracted out by
|
|
using the slightly higher-level functions L</lex_peek_unichar> and
|
|
L</lex_read_unichar>.
|
|
|
|
void lex_read_to(char* ptr)
|
|
|
|
=for hackers
|
|
Found in file toke.c
|
|
|
|
=item lex_read_unichar
|
|
X<lex_read_unichar>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Reads the next (Unicode) character in the text currently being lexed.
|
|
Returns the codepoint (unsigned integer value) of the character read,
|
|
and moves L</PL_parser-E<gt>bufptr> past the character, or returns -1
|
|
if lexing has reached the end of the input text. To non-destructively
|
|
examine the next character, use L</lex_peek_unichar> instead.
|
|
|
|
If the next character is in (or extends into) the next chunk of input
|
|
text, the next chunk will be read in. Normally the current chunk will be
|
|
discarded at the same time, but if C<flags> has the C<LEX_KEEP_PREVIOUS>
|
|
bit set, then the current chunk will not be discarded.
|
|
|
|
If the input is being interpreted as UTF-8 and a UTF-8 encoding error
|
|
is encountered, an exception is generated.
|
|
|
|
I32 lex_read_unichar(U32 flags)
|
|
|
|
=for hackers
|
|
Found in file toke.c
|
|
|
|
=item lex_start
|
|
X<lex_start>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Creates and initialises a new lexer/parser state object, supplying
|
|
a context in which to lex and parse from a new source of Perl code.
|
|
A pointer to the new state object is placed in L</PL_parser>. An entry
|
|
is made on the save stack so that upon unwinding, the new state object
|
|
will be destroyed and the former value of L</PL_parser> will be restored.
|
|
Nothing else need be done to clean up the parsing context.
|
|
|
|
The code to be parsed comes from C<line> and C<rsfp>. C<line>, if
|
|
non-null, provides a string (in SV form) containing code to be parsed.
|
|
A copy of the string is made, so subsequent modification of C<line>
|
|
does not affect parsing. C<rsfp>, if non-null, provides an input stream
|
|
from which code will be read to be parsed. If both are non-null, the
|
|
code in C<line> comes first and must consist of complete lines of input,
|
|
and C<rsfp> supplies the remainder of the source.
|
|
|
|
The C<flags> parameter is reserved for future use. Currently it is only
|
|
used by perl internally, so extensions should always pass zero.
|
|
|
|
void lex_start(SV* line, PerlIO *rsfp, U32 flags)
|
|
|
|
=for hackers
|
|
Found in file toke.c
|
|
|
|
=item lex_stuff_pv
|
|
X<lex_stuff_pv>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Insert characters into the lexer buffer (L</PL_parser-E<gt>linestr>),
|
|
immediately after the current lexing point (L</PL_parser-E<gt>bufptr>),
|
|
reallocating the buffer if necessary. This means that lexing code that
|
|
runs later will see the characters as if they had appeared in the input.
|
|
It is not recommended to do this as part of normal parsing, and most
|
|
uses of this facility run the risk of the inserted characters being
|
|
interpreted in an unintended manner.
|
|
|
|
The string to be inserted is represented by octets starting at C<pv>
|
|
and continuing to the first nul. These octets are interpreted as either
|
|
UTF-8 or Latin-1, according to whether the C<LEX_STUFF_UTF8> flag is set
|
|
in C<flags>. The characters are recoded for the lexer buffer, according
|
|
to how the buffer is currently being interpreted (L</lex_bufutf8>).
|
|
If it is not convenient to nul-terminate a string to be inserted, the
|
|
L</lex_stuff_pvn> function is more appropriate.
|
|
|
|
void lex_stuff_pv(const char* pv, U32 flags)
|
|
|
|
=for hackers
|
|
Found in file toke.c
|
|
|
|
=item lex_stuff_pvn
|
|
X<lex_stuff_pvn>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Insert characters into the lexer buffer (L</PL_parser-E<gt>linestr>),
|
|
immediately after the current lexing point (L</PL_parser-E<gt>bufptr>),
|
|
reallocating the buffer if necessary. This means that lexing code that
|
|
runs later will see the characters as if they had appeared in the input.
|
|
It is not recommended to do this as part of normal parsing, and most
|
|
uses of this facility run the risk of the inserted characters being
|
|
interpreted in an unintended manner.
|
|
|
|
The string to be inserted is represented by C<len> octets starting
|
|
at C<pv>. These octets are interpreted as either UTF-8 or Latin-1,
|
|
according to whether the C<LEX_STUFF_UTF8> flag is set in C<flags>.
|
|
The characters are recoded for the lexer buffer, according to how the
|
|
buffer is currently being interpreted (L</lex_bufutf8>). If a string
|
|
to be inserted is available as a Perl scalar, the L</lex_stuff_sv>
|
|
function is more convenient.
|
|
|
|
void lex_stuff_pvn(const char* pv, STRLEN len,
|
|
U32 flags)
|
|
|
|
=for hackers
|
|
Found in file toke.c
|
|
|
|
=item lex_stuff_pvs
|
|
X<lex_stuff_pvs>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Like L</lex_stuff_pvn>, but takes a literal string instead of
|
|
a string/length pair.
|
|
|
|
void lex_stuff_pvs("pv", U32 flags)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item lex_stuff_sv
|
|
X<lex_stuff_sv>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Insert characters into the lexer buffer (L</PL_parser-E<gt>linestr>),
|
|
immediately after the current lexing point (L</PL_parser-E<gt>bufptr>),
|
|
reallocating the buffer if necessary. This means that lexing code that
|
|
runs later will see the characters as if they had appeared in the input.
|
|
It is not recommended to do this as part of normal parsing, and most
|
|
uses of this facility run the risk of the inserted characters being
|
|
interpreted in an unintended manner.
|
|
|
|
The string to be inserted is the string value of C<sv>. The characters
|
|
are recoded for the lexer buffer, according to how the buffer is currently
|
|
being interpreted (L</lex_bufutf8>). If a string to be inserted is
|
|
not already a Perl scalar, the L</lex_stuff_pvn> function avoids the
|
|
need to construct a scalar.
|
|
|
|
void lex_stuff_sv(SV* sv, U32 flags)
|
|
|
|
=for hackers
|
|
Found in file toke.c
|
|
|
|
=item lex_unstuff
|
|
X<lex_unstuff>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Discards text about to be lexed, from L</PL_parser-E<gt>bufptr> up to
|
|
C<ptr>. Text following C<ptr> will be moved, and the buffer shortened.
|
|
This hides the discarded text from any lexing code that runs later,
|
|
as if the text had never appeared.
|
|
|
|
This is not the normal way to consume lexed text. For that, use
|
|
L</lex_read_to>.
|
|
|
|
void lex_unstuff(char* ptr)
|
|
|
|
=for hackers
|
|
Found in file toke.c
|
|
|
|
=item parse_arithexpr
|
|
X<parse_arithexpr>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Parse a Perl arithmetic expression. This may contain operators of precedence
|
|
down to the bit shift operators. The expression must be followed (and thus
|
|
terminated) either by a comparison or lower-precedence operator or by
|
|
something that would normally terminate an expression such as semicolon.
|
|
If C<flags> has the C<PARSE_OPTIONAL> bit set, then the expression is optional,
|
|
otherwise it is mandatory. It is up to the caller to ensure that the
|
|
dynamic parser state (L</PL_parser> et al) is correctly set to reflect
|
|
the source of the code to be parsed and the lexical context for the
|
|
expression.
|
|
|
|
The op tree representing the expression is returned. If an optional
|
|
expression is absent, a null pointer is returned, otherwise the pointer
|
|
will be non-null.
|
|
|
|
If an error occurs in parsing or compilation, in most cases a valid op
|
|
tree is returned anyway. The error is reflected in the parser state,
|
|
normally resulting in a single exception at the top level of parsing
|
|
which covers all the compilation errors that occurred. Some compilation
|
|
errors, however, will throw an exception immediately.
|
|
|
|
OP* parse_arithexpr(U32 flags)
|
|
|
|
=for hackers
|
|
Found in file toke.c
|
|
|
|
=item parse_barestmt
|
|
X<parse_barestmt>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Parse a single unadorned Perl statement. This may be a normal imperative
|
|
statement or a declaration that has compile-time effect. It does not
|
|
include any label or other affixture. It is up to the caller to ensure
|
|
that the dynamic parser state (L</PL_parser> et al) is correctly set to
|
|
reflect the source of the code to be parsed and the lexical context for
|
|
the statement.
|
|
|
|
The op tree representing the statement is returned. This may be a
|
|
null pointer if the statement is null, for example if it was actually
|
|
a subroutine definition (which has compile-time side effects). If not
|
|
null, it will be ops directly implementing the statement, suitable to
|
|
pass to L</newSTATEOP>. It will not normally include a C<nextstate> or
|
|
equivalent op (except for those embedded in a scope contained entirely
|
|
within the statement).
|
|
|
|
If an error occurs in parsing or compilation, in most cases a valid op
|
|
tree (most likely null) is returned anyway. The error is reflected in
|
|
the parser state, normally resulting in a single exception at the top
|
|
level of parsing which covers all the compilation errors that occurred.
|
|
Some compilation errors, however, will throw an exception immediately.
|
|
|
|
The C<flags> parameter is reserved for future use, and must always
|
|
be zero.
|
|
|
|
OP* parse_barestmt(U32 flags)
|
|
|
|
=for hackers
|
|
Found in file toke.c
|
|
|
|
=item parse_block
|
|
X<parse_block>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Parse a single complete Perl code block. This consists of an opening
|
|
brace, a sequence of statements, and a closing brace. The block
|
|
constitutes a lexical scope, so C<my> variables and various compile-time
|
|
effects can be contained within it. It is up to the caller to ensure
|
|
that the dynamic parser state (L</PL_parser> et al) is correctly set to
|
|
reflect the source of the code to be parsed and the lexical context for
|
|
the statement.
|
|
|
|
The op tree representing the code block is returned. This is always a
|
|
real op, never a null pointer. It will normally be a C<lineseq> list,
|
|
including C<nextstate> or equivalent ops. No ops to construct any kind
|
|
of runtime scope are included by virtue of it being a block.
|
|
|
|
If an error occurs in parsing or compilation, in most cases a valid op
|
|
tree (most likely null) is returned anyway. The error is reflected in
|
|
the parser state, normally resulting in a single exception at the top
|
|
level of parsing which covers all the compilation errors that occurred.
|
|
Some compilation errors, however, will throw an exception immediately.
|
|
|
|
The C<flags> parameter is reserved for future use, and must always
|
|
be zero.
|
|
|
|
OP* parse_block(U32 flags)
|
|
|
|
=for hackers
|
|
Found in file toke.c
|
|
|
|
=item parse_fullexpr
|
|
X<parse_fullexpr>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Parse a single complete Perl expression. This allows the full
|
|
expression grammar, including the lowest-precedence operators such
|
|
as C<or>. The expression must be followed (and thus terminated) by a
|
|
token that an expression would normally be terminated by: end-of-file,
|
|
closing bracketing punctuation, semicolon, or one of the keywords that
|
|
signals a postfix expression-statement modifier. If C<flags> has the
|
|
C<PARSE_OPTIONAL> bit set, then the expression is optional, otherwise it is
|
|
mandatory. It is up to the caller to ensure that the dynamic parser
|
|
state (L</PL_parser> et al) is correctly set to reflect the source of
|
|
the code to be parsed and the lexical context for the expression.
|
|
|
|
The op tree representing the expression is returned. If an optional
|
|
expression is absent, a null pointer is returned, otherwise the pointer
|
|
will be non-null.
|
|
|
|
If an error occurs in parsing or compilation, in most cases a valid op
|
|
tree is returned anyway. The error is reflected in the parser state,
|
|
normally resulting in a single exception at the top level of parsing
|
|
which covers all the compilation errors that occurred. Some compilation
|
|
errors, however, will throw an exception immediately.
|
|
|
|
OP* parse_fullexpr(U32 flags)
|
|
|
|
=for hackers
|
|
Found in file toke.c
|
|
|
|
=item parse_fullstmt
|
|
X<parse_fullstmt>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Parse a single complete Perl statement. This may be a normal imperative
|
|
statement or a declaration that has compile-time effect, and may include
|
|
optional labels. It is up to the caller to ensure that the dynamic
|
|
parser state (L</PL_parser> et al) is correctly set to reflect the source
|
|
of the code to be parsed and the lexical context for the statement.
|
|
|
|
The op tree representing the statement is returned. This may be a
|
|
null pointer if the statement is null, for example if it was actually
|
|
a subroutine definition (which has compile-time side effects). If not
|
|
null, it will be the result of a L</newSTATEOP> call, normally including
|
|
a C<nextstate> or equivalent op.
|
|
|
|
If an error occurs in parsing or compilation, in most cases a valid op
|
|
tree (most likely null) is returned anyway. The error is reflected in
|
|
the parser state, normally resulting in a single exception at the top
|
|
level of parsing which covers all the compilation errors that occurred.
|
|
Some compilation errors, however, will throw an exception immediately.
|
|
|
|
The C<flags> parameter is reserved for future use, and must always
|
|
be zero.
|
|
|
|
OP* parse_fullstmt(U32 flags)
|
|
|
|
=for hackers
|
|
Found in file toke.c
|
|
|
|
=item parse_label
|
|
X<parse_label>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Parse a single label, possibly optional, of the type that may prefix a
|
|
Perl statement. It is up to the caller to ensure that the dynamic parser
|
|
state (L</PL_parser> et al) is correctly set to reflect the source of
|
|
the code to be parsed. If C<flags> has the C<PARSE_OPTIONAL> bit set, then the
|
|
label is optional, otherwise it is mandatory.
|
|
|
|
The name of the label is returned in the form of a fresh scalar. If an
|
|
optional label is absent, a null pointer is returned.
|
|
|
|
If an error occurs in parsing, which can only occur if the label is
|
|
mandatory, a valid label is returned anyway. The error is reflected in
|
|
the parser state, normally resulting in a single exception at the top
|
|
level of parsing which covers all the compilation errors that occurred.
|
|
|
|
SV* parse_label(U32 flags)
|
|
|
|
=for hackers
|
|
Found in file toke.c
|
|
|
|
=item parse_listexpr
|
|
X<parse_listexpr>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Parse a Perl list expression. This may contain operators of precedence
|
|
down to the comma operator. The expression must be followed (and thus
|
|
terminated) either by a low-precedence logic operator such as C<or> or by
|
|
something that would normally terminate an expression such as semicolon.
|
|
If C<flags> has the C<PARSE_OPTIONAL> bit set, then the expression is optional,
|
|
otherwise it is mandatory. It is up to the caller to ensure that the
|
|
dynamic parser state (L</PL_parser> et al) is correctly set to reflect
|
|
the source of the code to be parsed and the lexical context for the
|
|
expression.
|
|
|
|
The op tree representing the expression is returned. If an optional
|
|
expression is absent, a null pointer is returned, otherwise the pointer
|
|
will be non-null.
|
|
|
|
If an error occurs in parsing or compilation, in most cases a valid op
|
|
tree is returned anyway. The error is reflected in the parser state,
|
|
normally resulting in a single exception at the top level of parsing
|
|
which covers all the compilation errors that occurred. Some compilation
|
|
errors, however, will throw an exception immediately.
|
|
|
|
OP* parse_listexpr(U32 flags)
|
|
|
|
=for hackers
|
|
Found in file toke.c
|
|
|
|
=item parse_stmtseq
|
|
X<parse_stmtseq>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Parse a sequence of zero or more Perl statements. These may be normal
|
|
imperative statements, including optional labels, or declarations
|
|
that have compile-time effect, or any mixture thereof. The statement
|
|
sequence ends when a closing brace or end-of-file is encountered in a
|
|
place where a new statement could have validly started. It is up to
|
|
the caller to ensure that the dynamic parser state (L</PL_parser> et al)
|
|
is correctly set to reflect the source of the code to be parsed and the
|
|
lexical context for the statements.
|
|
|
|
The op tree representing the statement sequence is returned. This may
|
|
be a null pointer if the statements were all null, for example if there
|
|
were no statements or if there were only subroutine definitions (which
|
|
have compile-time side effects). If not null, it will be a C<lineseq>
|
|
list, normally including C<nextstate> or equivalent ops.
|
|
|
|
If an error occurs in parsing or compilation, in most cases a valid op
|
|
tree is returned anyway. The error is reflected in the parser state,
|
|
normally resulting in a single exception at the top level of parsing
|
|
which covers all the compilation errors that occurred. Some compilation
|
|
errors, however, will throw an exception immediately.
|
|
|
|
The C<flags> parameter is reserved for future use, and must always
|
|
be zero.
|
|
|
|
OP* parse_stmtseq(U32 flags)
|
|
|
|
=for hackers
|
|
Found in file toke.c
|
|
|
|
=item parse_subsignature
|
|
X<parse_subsignature>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Parse a subroutine signature declaration. This is the contents of the
|
|
parentheses following a named or anonymous subroutine declaration when the
|
|
C<signatures> feature is enabled. Note that this function neither expects
|
|
nor consumes the opening and closing parentheses around the signature; it
|
|
is the caller's job to handle these.
|
|
|
|
This function must only be called during parsing of a subroutine; after
|
|
L</start_subparse> has been called. It might allocate lexical variables on
|
|
the pad for the current subroutine.
|
|
|
|
The op tree to unpack the arguments from the stack at runtime is returned.
|
|
This op tree should appear at the beginning of the compiled function. The
|
|
caller may wish to use L</op_append_list> to build their function body
|
|
after it, or splice it together with the body before calling L</newATTRSUB>.
|
|
|
|
The C<flags> parameter is reserved for future use, and must always
|
|
be zero.
|
|
|
|
OP* parse_subsignature(U32 flags)
|
|
|
|
=for hackers
|
|
Found in file toke.c
|
|
|
|
=item parse_termexpr
|
|
X<parse_termexpr>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Parse a Perl term expression. This may contain operators of precedence
|
|
down to the assignment operators. The expression must be followed (and thus
|
|
terminated) either by a comma or lower-precedence operator or by
|
|
something that would normally terminate an expression such as semicolon.
|
|
If C<flags> has the C<PARSE_OPTIONAL> bit set, then the expression is optional,
|
|
otherwise it is mandatory. It is up to the caller to ensure that the
|
|
dynamic parser state (L</PL_parser> et al) is correctly set to reflect
|
|
the source of the code to be parsed and the lexical context for the
|
|
expression.
|
|
|
|
The op tree representing the expression is returned. If an optional
|
|
expression is absent, a null pointer is returned, otherwise the pointer
|
|
will be non-null.
|
|
|
|
If an error occurs in parsing or compilation, in most cases a valid op
|
|
tree is returned anyway. The error is reflected in the parser state,
|
|
normally resulting in a single exception at the top level of parsing
|
|
which covers all the compilation errors that occurred. Some compilation
|
|
errors, however, will throw an exception immediately.
|
|
|
|
OP* parse_termexpr(U32 flags)
|
|
|
|
=for hackers
|
|
Found in file toke.c
|
|
|
|
=item PL_parser
|
|
X<PL_parser>
|
|
|
|
Pointer to a structure encapsulating the state of the parsing operation
|
|
currently in progress. The pointer can be locally changed to perform
|
|
a nested parse without interfering with the state of an outer parse.
|
|
Individual members of C<PL_parser> have their own documentation.
|
|
|
|
=for hackers
|
|
Found in file toke.c
|
|
|
|
=item PL_parser-E<gt>bufend
|
|
X<PL_parser-E<gt>bufend>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Direct pointer to the end of the chunk of text currently being lexed, the
|
|
end of the lexer buffer. This is equal to C<SvPVX(PL_parser-E<gt>linestr)
|
|
+ SvCUR(PL_parser-E<gt>linestr)>. A C<NUL> character (zero octet) is
|
|
always located at the end of the buffer, and does not count as part of
|
|
the buffer's contents.
|
|
|
|
=for hackers
|
|
Found in file toke.c
|
|
|
|
=item PL_parser-E<gt>bufptr
|
|
X<PL_parser-E<gt>bufptr>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Points to the current position of lexing inside the lexer buffer.
|
|
Characters around this point may be freely examined, within
|
|
the range delimited by C<SvPVX(L</PL_parser-E<gt>linestr>)> and
|
|
L</PL_parser-E<gt>bufend>. The octets of the buffer may be intended to be
|
|
interpreted as either UTF-8 or Latin-1, as indicated by L</lex_bufutf8>.
|
|
|
|
Lexing code (whether in the Perl core or not) moves this pointer past
|
|
the characters that it consumes. It is also expected to perform some
|
|
bookkeeping whenever a newline character is consumed. This movement
|
|
can be more conveniently performed by the function L</lex_read_to>,
|
|
which handles newlines appropriately.
|
|
|
|
Interpretation of the buffer's octets can be abstracted out by
|
|
using the slightly higher-level functions L</lex_peek_unichar> and
|
|
L</lex_read_unichar>.
|
|
|
|
=for hackers
|
|
Found in file toke.c
|
|
|
|
=item PL_parser-E<gt>linestart
|
|
X<PL_parser-E<gt>linestart>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Points to the start of the current line inside the lexer buffer.
|
|
This is useful for indicating at which column an error occurred, and
|
|
not much else. This must be updated by any lexing code that consumes
|
|
a newline; the function L</lex_read_to> handles this detail.
|
|
|
|
=for hackers
|
|
Found in file toke.c
|
|
|
|
=item PL_parser-E<gt>linestr
|
|
X<PL_parser-E<gt>linestr>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Buffer scalar containing the chunk currently under consideration of the
|
|
text currently being lexed. This is always a plain string scalar (for
|
|
which C<SvPOK> is true). It is not intended to be used as a scalar by
|
|
normal scalar means; instead refer to the buffer directly by the pointer
|
|
variables described below.
|
|
|
|
The lexer maintains various C<char*> pointers to things in the
|
|
C<PL_parser-E<gt>linestr> buffer. If C<PL_parser-E<gt>linestr> is ever
|
|
reallocated, all of these pointers must be updated. Don't attempt to
|
|
do this manually, but rather use L</lex_grow_linestr> if you need to
|
|
reallocate the buffer.
|
|
|
|
The content of the text chunk in the buffer is commonly exactly one
|
|
complete line of input, up to and including a newline terminator,
|
|
but there are situations where it is otherwise. The octets of the
|
|
buffer may be intended to be interpreted as either UTF-8 or Latin-1.
|
|
The function L</lex_bufutf8> tells you which. Do not use the C<SvUTF8>
|
|
flag on this scalar, which may disagree with it.
|
|
|
|
For direct examination of the buffer, the variable
|
|
L</PL_parser-E<gt>bufend> points to the end of the buffer. The current
|
|
lexing position is pointed to by L</PL_parser-E<gt>bufptr>. Direct use
|
|
of these pointers is usually preferable to examination of the scalar
|
|
through normal scalar means.
|
|
|
|
=for hackers
|
|
Found in file toke.c
|
|
|
|
=item wrap_keyword_plugin
|
|
X<wrap_keyword_plugin>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Puts a C function into the chain of keyword plugins. This is the
|
|
preferred way to manipulate the L</PL_keyword_plugin> variable.
|
|
C<new_plugin> is a pointer to the C function that is to be added to the
|
|
keyword plugin chain, and C<old_plugin_p> points to the storage location
|
|
where a pointer to the next function in the chain will be stored. The
|
|
value of C<new_plugin> is written into the L</PL_keyword_plugin> variable,
|
|
while the value previously stored there is written to C<*old_plugin_p>.
|
|
|
|
L</PL_keyword_plugin> is global to an entire process, and a module wishing
|
|
to hook keyword parsing may find itself invoked more than once per
|
|
process, typically in different threads. To handle that situation, this
|
|
function is idempotent. The location C<*old_plugin_p> must initially
|
|
(once per process) contain a null pointer. A C variable of static
|
|
duration (declared at file scope, typically also marked C<static> to give
|
|
it internal linkage) will be implicitly initialised appropriately, if it
|
|
does not have an explicit initialiser. This function will only actually
|
|
modify the plugin chain if it finds C<*old_plugin_p> to be null. This
|
|
function is also thread safe on the small scale. It uses appropriate
|
|
locking to avoid race conditions in accessing L</PL_keyword_plugin>.
|
|
|
|
When this function is called, the function referenced by C<new_plugin>
|
|
must be ready to be called, except for C<*old_plugin_p> being unfilled.
|
|
In a threading situation, C<new_plugin> may be called immediately, even
|
|
before this function has returned. C<*old_plugin_p> will always be
|
|
appropriately set before C<new_plugin> is called. If C<new_plugin>
|
|
decides not to do anything special with the identifier that it is given
|
|
(which is the usual case for most calls to a keyword plugin), it must
|
|
chain the plugin function referenced by C<*old_plugin_p>.
|
|
|
|
Taken all together, XS code to install a keyword plugin should typically
|
|
look something like this:
|
|
|
|
static Perl_keyword_plugin_t next_keyword_plugin;
|
|
static OP *my_keyword_plugin(pTHX_
|
|
char *keyword_ptr, STRLEN keyword_len, OP **op_ptr)
|
|
{
|
|
if (memEQs(keyword_ptr, keyword_len,
|
|
"my_new_keyword")) {
|
|
...
|
|
} else {
|
|
return next_keyword_plugin(aTHX_
|
|
keyword_ptr, keyword_len, op_ptr);
|
|
}
|
|
}
|
|
BOOT:
|
|
wrap_keyword_plugin(my_keyword_plugin,
|
|
&next_keyword_plugin);
|
|
|
|
Direct access to L</PL_keyword_plugin> should be avoided.
|
|
|
|
void wrap_keyword_plugin(
|
|
Perl_keyword_plugin_t new_plugin,
|
|
Perl_keyword_plugin_t *old_plugin_p
|
|
)
|
|
|
|
=for hackers
|
|
Found in file toke.c
|
|
|
|
|
|
=back
|
|
|
|
=head1 Locale-related functions and macros
|
|
|
|
=over 8
|
|
|
|
=item DECLARATION_FOR_LC_NUMERIC_MANIPULATION
|
|
X<DECLARATION_FOR_LC_NUMERIC_MANIPULATION>
|
|
|
|
This macro should be used as a statement. It declares a private variable
|
|
(whose name begins with an underscore) that is needed by the other macros in
|
|
this section. Failing to include this correctly should lead to a syntax error.
|
|
For compatibility with C89 C compilers it should be placed in a block before
|
|
any executable statements.
|
|
|
|
void DECLARATION_FOR_LC_NUMERIC_MANIPULATION
|
|
|
|
=for hackers
|
|
Found in file perl.h
|
|
|
|
=item IN_LOCALE
|
|
X<IN_LOCALE>
|
|
|
|
Evaluates to TRUE if the plain locale pragma without a parameter (S<C<use
|
|
locale>>) is in effect.
|
|
|
|
bool IN_LOCALE
|
|
|
|
=for hackers
|
|
Found in file perl.h
|
|
|
|
=item IN_LOCALE_COMPILETIME
|
|
X<IN_LOCALE_COMPILETIME>
|
|
|
|
Evaluates to TRUE if, when compiling a perl program (including an C<eval>) if
|
|
the plain locale pragma without a parameter (S<C<use locale>>) is in effect.
|
|
|
|
bool IN_LOCALE_COMPILETIME
|
|
|
|
=for hackers
|
|
Found in file perl.h
|
|
|
|
=item IN_LOCALE_RUNTIME
|
|
X<IN_LOCALE_RUNTIME>
|
|
|
|
Evaluates to TRUE if, when executing a perl program (including an C<eval>) if
|
|
the plain locale pragma without a parameter (S<C<use locale>>) is in effect.
|
|
|
|
bool IN_LOCALE_RUNTIME
|
|
|
|
=for hackers
|
|
Found in file perl.h
|
|
|
|
=item Perl_langinfo
|
|
X<Perl_langinfo>
|
|
|
|
This is an (almost) drop-in replacement for the system C<L<nl_langinfo(3)>>,
|
|
taking the same C<item> parameter values, and returning the same information.
|
|
But it is more thread-safe than regular C<nl_langinfo()>, and hides the quirks
|
|
of Perl's locale handling from your code, and can be used on systems that lack
|
|
a native C<nl_langinfo>.
|
|
|
|
Expanding on these:
|
|
|
|
=over
|
|
|
|
=item *
|
|
|
|
The reason it isn't quite a drop-in replacement is actually an advantage. The
|
|
only difference is that it returns S<C<const char *>>, whereas plain
|
|
C<nl_langinfo()> returns S<C<char *>>, but you are (only by documentation)
|
|
forbidden to write into the buffer. By declaring this C<const>, the compiler
|
|
enforces this restriction, so if it is violated, you know at compilation time,
|
|
rather than getting segfaults at runtime.
|
|
|
|
=item *
|
|
|
|
It delivers the correct results for the C<RADIXCHAR> and C<THOUSEP> items,
|
|
without you having to write extra code. The reason for the extra code would be
|
|
because these are from the C<LC_NUMERIC> locale category, which is normally
|
|
kept set by Perl so that the radix is a dot, and the separator is the empty
|
|
string, no matter what the underlying locale is supposed to be, and so to get
|
|
the expected results, you have to temporarily toggle into the underlying
|
|
locale, and later toggle back. (You could use plain C<nl_langinfo> and
|
|
C<L</STORE_LC_NUMERIC_FORCE_TO_UNDERLYING>> for this but then you wouldn't get
|
|
the other advantages of C<Perl_langinfo()>; not keeping C<LC_NUMERIC> in the C
|
|
(or equivalent) locale would break a lot of CPAN, which is expecting the radix
|
|
(decimal point) character to be a dot.)
|
|
|
|
=item *
|
|
|
|
The system function it replaces can have its static return buffer trashed,
|
|
not only by a subesequent call to that function, but by a C<freelocale>,
|
|
C<setlocale>, or other locale change. The returned buffer of this function is
|
|
not changed until the next call to it, so the buffer is never in a trashed
|
|
state.
|
|
|
|
=item *
|
|
|
|
Its return buffer is per-thread, so it also is never overwritten by a call to
|
|
this function from another thread; unlike the function it replaces.
|
|
|
|
=item *
|
|
|
|
But most importantly, it works on systems that don't have C<nl_langinfo>, such
|
|
as Windows, hence makes your code more portable. Of the fifty-some possible
|
|
items specified by the POSIX 2008 standard,
|
|
L<http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/langinfo.h.html>,
|
|
only one is completely unimplemented, though on non-Windows platforms, another
|
|
significant one is also not implemented). It uses various techniques to
|
|
recover the other items, including calling C<L<localeconv(3)>>, and
|
|
C<L<strftime(3)>>, both of which are specified in C89, so should be always be
|
|
available. Later C<strftime()> versions have additional capabilities; C<""> is
|
|
returned for those not available on your system.
|
|
|
|
It is important to note that when called with an item that is recovered by
|
|
using C<localeconv>, the buffer from any previous explicit call to
|
|
C<localeconv> will be overwritten. This means you must save that buffer's
|
|
contents if you need to access them after a call to this function. (But note
|
|
that you might not want to be using C<localeconv()> directly anyway, because of
|
|
issues like the ones listed in the second item of this list (above) for
|
|
C<RADIXCHAR> and C<THOUSEP>. You can use the methods given in L<perlcall> to
|
|
call L<POSIX/localeconv> and avoid all the issues, but then you have a hash to
|
|
unpack).
|
|
|
|
The details for those items which may deviate from what this emulation returns
|
|
and what a native C<nl_langinfo()> would return are specified in
|
|
L<I18N::Langinfo>.
|
|
|
|
=back
|
|
|
|
When using C<Perl_langinfo> on systems that don't have a native
|
|
C<nl_langinfo()>, you must
|
|
|
|
#include "perl_langinfo.h"
|
|
|
|
before the C<perl.h> C<#include>. You can replace your C<langinfo.h>
|
|
C<#include> with this one. (Doing it this way keeps out the symbols that plain
|
|
C<langinfo.h> would try to import into the namespace for code that doesn't need
|
|
it.)
|
|
|
|
The original impetus for C<Perl_langinfo()> was so that code that needs to
|
|
find out the current currency symbol, floating point radix character, or digit
|
|
grouping separator can use, on all systems, the simpler and more
|
|
thread-friendly C<nl_langinfo> API instead of C<L<localeconv(3)>> which is a
|
|
pain to make thread-friendly. For other fields returned by C<localeconv>, it
|
|
is better to use the methods given in L<perlcall> to call
|
|
L<C<POSIX::localeconv()>|POSIX/localeconv>, which is thread-friendly.
|
|
|
|
const char* Perl_langinfo(const nl_item item)
|
|
|
|
=for hackers
|
|
Found in file locale.c
|
|
|
|
=item Perl_setlocale
|
|
X<Perl_setlocale>
|
|
|
|
This is an (almost) drop-in replacement for the system L<C<setlocale(3)>>,
|
|
taking the same parameters, and returning the same information, except that it
|
|
returns the correct underlying C<LC_NUMERIC> locale. Regular C<setlocale> will
|
|
instead return C<C> if the underlying locale has a non-dot decimal point
|
|
character, or a non-empty thousands separator for displaying floating point
|
|
numbers. This is because perl keeps that locale category such that it has a
|
|
dot and empty separator, changing the locale briefly during the operations
|
|
where the underlying one is required. C<Perl_setlocale> knows about this, and
|
|
compensates; regular C<setlocale> doesn't.
|
|
|
|
Another reason it isn't completely a drop-in replacement is that it is
|
|
declared to return S<C<const char *>>, whereas the system setlocale omits the
|
|
C<const> (presumably because its API was specified long ago, and can't be
|
|
updated; it is illegal to change the information C<setlocale> returns; doing
|
|
so leads to segfaults.)
|
|
|
|
Finally, C<Perl_setlocale> works under all circumstances, whereas plain
|
|
C<setlocale> can be completely ineffective on some platforms under some
|
|
configurations.
|
|
|
|
C<Perl_setlocale> should not be used to change the locale except on systems
|
|
where the predefined variable C<${^SAFE_LOCALES}> is 1. On some such systems,
|
|
the system C<setlocale()> is ineffective, returning the wrong information, and
|
|
failing to actually change the locale. C<Perl_setlocale>, however works
|
|
properly in all circumstances.
|
|
|
|
The return points to a per-thread static buffer, which is overwritten the next
|
|
time C<Perl_setlocale> is called from the same thread.
|
|
|
|
const char* Perl_setlocale(const int category,
|
|
const char* locale)
|
|
|
|
=for hackers
|
|
Found in file locale.c
|
|
|
|
=item RESTORE_LC_NUMERIC
|
|
X<RESTORE_LC_NUMERIC>
|
|
|
|
This is used in conjunction with one of the macros
|
|
L</STORE_LC_NUMERIC_SET_TO_NEEDED>
|
|
and L</STORE_LC_NUMERIC_FORCE_TO_UNDERLYING> to properly restore the
|
|
C<LC_NUMERIC> state.
|
|
|
|
A call to L</DECLARATION_FOR_LC_NUMERIC_MANIPULATION> must have been made to
|
|
declare at compile time a private variable used by this macro and the two
|
|
C<STORE> ones. This macro should be called as a single statement, not an
|
|
expression, but with an empty argument list, like this:
|
|
|
|
{
|
|
DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
|
|
...
|
|
RESTORE_LC_NUMERIC();
|
|
...
|
|
}
|
|
|
|
void RESTORE_LC_NUMERIC()
|
|
|
|
=for hackers
|
|
Found in file perl.h
|
|
|
|
=item STORE_LC_NUMERIC_FORCE_TO_UNDERLYING
|
|
X<STORE_LC_NUMERIC_FORCE_TO_UNDERLYING>
|
|
|
|
This is used by XS code that is C<LC_NUMERIC> locale-aware to force the
|
|
locale for category C<LC_NUMERIC> to be what perl thinks is the current
|
|
underlying locale. (The perl interpreter could be wrong about what the
|
|
underlying locale actually is if some C or XS code has called the C library
|
|
function L<setlocale(3)> behind its back; calling L</sync_locale> before calling
|
|
this macro will update perl's records.)
|
|
|
|
A call to L</DECLARATION_FOR_LC_NUMERIC_MANIPULATION> must have been made to
|
|
declare at compile time a private variable used by this macro. This macro
|
|
should be called as a single statement, not an expression, but with an empty
|
|
argument list, like this:
|
|
|
|
{
|
|
DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
|
|
...
|
|
STORE_LC_NUMERIC_FORCE_TO_UNDERLYING();
|
|
...
|
|
RESTORE_LC_NUMERIC();
|
|
...
|
|
}
|
|
|
|
The private variable is used to save the current locale state, so
|
|
that the requisite matching call to L</RESTORE_LC_NUMERIC> can restore it.
|
|
|
|
On threaded perls not operating with thread-safe functionality, this macro uses
|
|
a mutex to force a critical section. Therefore the matching RESTORE should be
|
|
close by, and guaranteed to be called.
|
|
|
|
void STORE_LC_NUMERIC_FORCE_TO_UNDERLYING()
|
|
|
|
=for hackers
|
|
Found in file perl.h
|
|
|
|
=item STORE_LC_NUMERIC_SET_TO_NEEDED
|
|
X<STORE_LC_NUMERIC_SET_TO_NEEDED>
|
|
|
|
This is used to help wrap XS or C code that is C<LC_NUMERIC> locale-aware.
|
|
This locale category is generally kept set to a locale where the decimal radix
|
|
character is a dot, and the separator between groups of digits is empty. This
|
|
is because most XS code that reads floating point numbers is expecting them to
|
|
have this syntax.
|
|
|
|
This macro makes sure the current C<LC_NUMERIC> state is set properly, to be
|
|
aware of locale if the call to the XS or C code from the Perl program is
|
|
from within the scope of a S<C<use locale>>; or to ignore locale if the call is
|
|
instead from outside such scope.
|
|
|
|
This macro is the start of wrapping the C or XS code; the wrap ending is done
|
|
by calling the L</RESTORE_LC_NUMERIC> macro after the operation. Otherwise
|
|
the state can be changed that will adversely affect other XS code.
|
|
|
|
A call to L</DECLARATION_FOR_LC_NUMERIC_MANIPULATION> must have been made to
|
|
declare at compile time a private variable used by this macro. This macro
|
|
should be called as a single statement, not an expression, but with an empty
|
|
argument list, like this:
|
|
|
|
{
|
|
DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
|
|
...
|
|
STORE_LC_NUMERIC_SET_TO_NEEDED();
|
|
...
|
|
RESTORE_LC_NUMERIC();
|
|
...
|
|
}
|
|
|
|
On threaded perls not operating with thread-safe functionality, this macro uses
|
|
a mutex to force a critical section. Therefore the matching RESTORE should be
|
|
close by, and guaranteed to be called; see L</WITH_LC_NUMERIC_SET_TO_NEEDED>
|
|
for a more contained way to ensure that.
|
|
|
|
void STORE_LC_NUMERIC_SET_TO_NEEDED()
|
|
|
|
=for hackers
|
|
Found in file perl.h
|
|
|
|
=item STORE_LC_NUMERIC_SET_TO_NEEDED_IN
|
|
X<STORE_LC_NUMERIC_SET_TO_NEEDED_IN>
|
|
|
|
Same as L</STORE_LC_NUMERIC_SET_TO_NEEDED> with in_lc_numeric provided
|
|
as the precalculated value of C<IN_LC(LC_NUMERIC)>. It is the caller's
|
|
responsibility to ensure that the status of C<PL_compiling> and C<PL_hints>
|
|
cannot have changed since the precalculation.
|
|
|
|
void STORE_LC_NUMERIC_SET_TO_NEEDED_IN(
|
|
bool in_lc_numeric
|
|
)
|
|
|
|
=for hackers
|
|
Found in file perl.h
|
|
|
|
=item switch_to_global_locale
|
|
X<switch_to_global_locale>
|
|
|
|
On systems without locale support, or on typical single-threaded builds, or on
|
|
platforms that do not support per-thread locale operations, this function does
|
|
nothing. On such systems that do have locale support, only a locale global to
|
|
the whole program is available.
|
|
|
|
On multi-threaded builds on systems that do have per-thread locale operations,
|
|
this function converts the thread it is running in to use the global locale.
|
|
This is for code that has not yet or cannot be updated to handle multi-threaded
|
|
locale operation. As long as only a single thread is so-converted, everything
|
|
works fine, as all the other threads continue to ignore the global one, so only
|
|
this thread looks at it.
|
|
|
|
However, on Windows systems this isn't quite true prior to Visual Studio 15,
|
|
at which point Microsoft fixed a bug. A race can occur if you use the
|
|
following operations on earlier Windows platforms:
|
|
|
|
=over
|
|
|
|
=item L<POSIX::localeconv|POSIX/localeconv>
|
|
|
|
=item L<I18N::Langinfo>, items C<CRNCYSTR> and C<THOUSEP>
|
|
|
|
=item L<perlapi/Perl_langinfo>, items C<CRNCYSTR> and C<THOUSEP>
|
|
|
|
=back
|
|
|
|
The first item is not fixable (except by upgrading to a later Visual Studio
|
|
release), but it would be possible to work around the latter two items by using
|
|
the Windows API functions C<GetNumberFormat> and C<GetCurrencyFormat>; patches
|
|
welcome.
|
|
|
|
Without this function call, threads that use the L<C<setlocale(3)>> system
|
|
function will not work properly, as all the locale-sensitive functions will
|
|
look at the per-thread locale, and C<setlocale> will have no effect on this
|
|
thread.
|
|
|
|
Perl code should convert to either call
|
|
L<C<Perl_setlocale>|perlapi/Perl_setlocale> (which is a drop-in for the system
|
|
C<setlocale>) or use the methods given in L<perlcall> to call
|
|
L<C<POSIX::setlocale>|POSIX/setlocale>. Either one will transparently properly
|
|
handle all cases of single- vs multi-thread, POSIX 2008-supported or not.
|
|
|
|
Non-Perl libraries, such as C<gtk>, that call the system C<setlocale> can
|
|
continue to work if this function is called before transferring control to the
|
|
library.
|
|
|
|
Upon return from the code that needs to use the global locale,
|
|
L<C<sync_locale()>|perlapi/sync_locale> should be called to restore the safe
|
|
multi-thread operation.
|
|
|
|
void switch_to_global_locale()
|
|
|
|
=for hackers
|
|
Found in file locale.c
|
|
|
|
=item sync_locale
|
|
X<sync_locale>
|
|
|
|
L<C<Perl_setlocale>|perlapi/Perl_setlocale> can be used at any time to query or
|
|
change the locale (though changing the locale is antisocial and dangerous on
|
|
multi-threaded systems that don't have multi-thread safe locale operations.
|
|
(See L<perllocale/Multi-threaded operation>). Using the system
|
|
L<C<setlocale(3)>> should be avoided. Nevertheless, certain non-Perl libraries
|
|
called from XS, such as C<Gtk> do so, and this can't be changed. When the
|
|
locale is changed by XS code that didn't use
|
|
L<C<Perl_setlocale>|perlapi/Perl_setlocale>, Perl needs to be told that the
|
|
locale has changed. Use this function to do so, before returning to Perl.
|
|
|
|
The return value is a boolean: TRUE if the global locale at the time of call
|
|
was in effect; and FALSE if a per-thread locale was in effect. This can be
|
|
used by the caller that needs to restore things as-they-were to decide whether
|
|
or not to call
|
|
L<C<Perl_switch_to_global_locale>|perlapi/switch_to_global_locale>.
|
|
|
|
bool sync_locale()
|
|
|
|
=for hackers
|
|
Found in file locale.c
|
|
|
|
=item WITH_LC_NUMERIC_SET_TO_NEEDED
|
|
X<WITH_LC_NUMERIC_SET_TO_NEEDED>
|
|
|
|
This macro invokes the supplied statement or block within the context
|
|
of a L</STORE_LC_NUMERIC_SET_TO_NEEDED> .. L</RESTORE_LC_NUMERIC> pair
|
|
if required, so eg:
|
|
|
|
WITH_LC_NUMERIC_SET_TO_NEEDED(
|
|
SNPRINTF_G(fv, ebuf, sizeof(ebuf), precis)
|
|
);
|
|
|
|
is equivalent to:
|
|
|
|
{
|
|
#ifdef USE_LOCALE_NUMERIC
|
|
DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
|
|
STORE_LC_NUMERIC_SET_TO_NEEDED();
|
|
#endif
|
|
SNPRINTF_G(fv, ebuf, sizeof(ebuf), precis);
|
|
#ifdef USE_LOCALE_NUMERIC
|
|
RESTORE_LC_NUMERIC();
|
|
#endif
|
|
}
|
|
|
|
void WITH_LC_NUMERIC_SET_TO_NEEDED(block)
|
|
|
|
=for hackers
|
|
Found in file perl.h
|
|
|
|
=item WITH_LC_NUMERIC_SET_TO_NEEDED_IN
|
|
X<WITH_LC_NUMERIC_SET_TO_NEEDED_IN>
|
|
|
|
Same as L</WITH_LC_NUMERIC_SET_TO_NEEDED> with in_lc_numeric provided
|
|
as the precalculated value of C<IN_LC(LC_NUMERIC)>. It is the caller's
|
|
responsibility to ensure that the status of C<PL_compiling> and C<PL_hints>
|
|
cannot have changed since the precalculation.
|
|
|
|
void WITH_LC_NUMERIC_SET_TO_NEEDED_IN(
|
|
bool in_lc_numeric, block
|
|
)
|
|
|
|
=for hackers
|
|
Found in file perl.h
|
|
|
|
|
|
=back
|
|
|
|
=head1 Magical Functions
|
|
|
|
=over 8
|
|
|
|
=item mg_clear
|
|
X<mg_clear>
|
|
|
|
Clear something magical that the SV represents. See C<L</sv_magic>>.
|
|
|
|
int mg_clear(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file mg.c
|
|
|
|
=item mg_copy
|
|
X<mg_copy>
|
|
|
|
Copies the magic from one SV to another. See C<L</sv_magic>>.
|
|
|
|
int mg_copy(SV *sv, SV *nsv, const char *key,
|
|
I32 klen)
|
|
|
|
=for hackers
|
|
Found in file mg.c
|
|
|
|
=item mg_find
|
|
X<mg_find>
|
|
|
|
Finds the magic pointer for C<type> matching the SV. See C<L</sv_magic>>.
|
|
|
|
MAGIC* mg_find(const SV* sv, int type)
|
|
|
|
=for hackers
|
|
Found in file mg.c
|
|
|
|
=item mg_findext
|
|
X<mg_findext>
|
|
|
|
Finds the magic pointer of C<type> with the given C<vtbl> for the C<SV>. See
|
|
C<L</sv_magicext>>.
|
|
|
|
MAGIC* mg_findext(const SV* sv, int type,
|
|
const MGVTBL *vtbl)
|
|
|
|
=for hackers
|
|
Found in file mg.c
|
|
|
|
=item mg_free
|
|
X<mg_free>
|
|
|
|
Free any magic storage used by the SV. See C<L</sv_magic>>.
|
|
|
|
int mg_free(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file mg.c
|
|
|
|
=item mg_freeext
|
|
X<mg_freeext>
|
|
|
|
Remove any magic of type C<how> using virtual table C<vtbl> from the
|
|
SV C<sv>. See L</sv_magic>.
|
|
|
|
C<mg_freeext(sv, how, NULL)> is equivalent to C<mg_free_type(sv, how)>.
|
|
|
|
void mg_freeext(SV* sv, int how, const MGVTBL *vtbl)
|
|
|
|
=for hackers
|
|
Found in file mg.c
|
|
|
|
=item mg_free_type
|
|
X<mg_free_type>
|
|
|
|
Remove any magic of type C<how> from the SV C<sv>. See L</sv_magic>.
|
|
|
|
void mg_free_type(SV* sv, int how)
|
|
|
|
=for hackers
|
|
Found in file mg.c
|
|
|
|
=item mg_get
|
|
X<mg_get>
|
|
|
|
Do magic before a value is retrieved from the SV. The type of SV must
|
|
be >= C<SVt_PVMG>. See C<L</sv_magic>>.
|
|
|
|
int mg_get(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file mg.c
|
|
|
|
=item mg_length
|
|
X<mg_length>
|
|
|
|
|
|
DEPRECATED! It is planned to remove this function from a
|
|
future release of Perl. Do not use it for new code; remove it from
|
|
existing code.
|
|
|
|
|
|
Reports on the SV's length in bytes, calling length magic if available,
|
|
but does not set the UTF8 flag on C<sv>. It will fall back to 'get'
|
|
magic if there is no 'length' magic, but with no indication as to
|
|
whether it called 'get' magic. It assumes C<sv> is a C<PVMG> or
|
|
higher. Use C<sv_len()> instead.
|
|
|
|
U32 mg_length(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file mg.c
|
|
|
|
=item mg_magical
|
|
X<mg_magical>
|
|
|
|
Turns on the magical status of an SV. See C<L</sv_magic>>.
|
|
|
|
void mg_magical(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file mg.c
|
|
|
|
=item mg_set
|
|
X<mg_set>
|
|
|
|
Do magic after a value is assigned to the SV. See C<L</sv_magic>>.
|
|
|
|
int mg_set(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file mg.c
|
|
|
|
=item SvGETMAGIC
|
|
X<SvGETMAGIC>
|
|
|
|
Invokes C<mg_get> on an SV if it has 'get' magic. For example, this
|
|
will call C<FETCH> on a tied variable. This macro evaluates its
|
|
argument more than once.
|
|
|
|
void SvGETMAGIC(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvLOCK
|
|
X<SvLOCK>
|
|
|
|
Arranges for a mutual exclusion lock to be obtained on C<sv> if a suitable module
|
|
has been loaded.
|
|
|
|
void SvLOCK(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvSETMAGIC
|
|
X<SvSETMAGIC>
|
|
|
|
Invokes C<mg_set> on an SV if it has 'set' magic. This is necessary
|
|
after modifying a scalar, in case it is a magical variable like C<$|>
|
|
or a tied variable (it calls C<STORE>). This macro evaluates its
|
|
argument more than once.
|
|
|
|
void SvSETMAGIC(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvSetMagicSV
|
|
X<SvSetMagicSV>
|
|
|
|
Like C<SvSetSV>, but does any set magic required afterwards.
|
|
|
|
void SvSetMagicSV(SV* dsv, SV* ssv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvSetMagicSV_nosteal
|
|
X<SvSetMagicSV_nosteal>
|
|
|
|
Like C<SvSetSV_nosteal>, but does any set magic required afterwards.
|
|
|
|
void SvSetMagicSV_nosteal(SV* dsv, SV* ssv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvSetSV
|
|
X<SvSetSV>
|
|
|
|
Calls C<sv_setsv> if C<dsv> is not the same as C<ssv>. May evaluate arguments
|
|
more than once. Does not handle 'set' magic on the destination SV.
|
|
|
|
void SvSetSV(SV* dsv, SV* ssv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvSetSV_nosteal
|
|
X<SvSetSV_nosteal>
|
|
|
|
Calls a non-destructive version of C<sv_setsv> if C<dsv> is not the same as
|
|
C<ssv>. May evaluate arguments more than once.
|
|
|
|
void SvSetSV_nosteal(SV* dsv, SV* ssv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvSHARE
|
|
X<SvSHARE>
|
|
|
|
Arranges for C<sv> to be shared between threads if a suitable module
|
|
has been loaded.
|
|
|
|
void SvSHARE(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item sv_string_from_errnum
|
|
X<sv_string_from_errnum>
|
|
|
|
Generates the message string describing an OS error and returns it as
|
|
an SV. C<errnum> must be a value that C<errno> could take, identifying
|
|
the type of error.
|
|
|
|
If C<tgtsv> is non-null then the string will be written into that SV
|
|
(overwriting existing content) and it will be returned. If C<tgtsv>
|
|
is a null pointer then the string will be written into a new mortal SV
|
|
which will be returned.
|
|
|
|
The message will be taken from whatever locale would be used by C<$!>,
|
|
and will be encoded in the SV in whatever manner would be used by C<$!>.
|
|
The details of this process are subject to future change. Currently,
|
|
the message is taken from the C locale by default (usually producing an
|
|
English message), and from the currently selected locale when in the scope
|
|
of the C<use locale> pragma. A heuristic attempt is made to decode the
|
|
message from the locale's character encoding, but it will only be decoded
|
|
as either UTF-8 or ISO-8859-1. It is always correctly decoded in a UTF-8
|
|
locale, usually in an ISO-8859-1 locale, and never in any other locale.
|
|
|
|
The SV is always returned containing an actual string, and with no other
|
|
OK bits set. Unlike C<$!>, a message is even yielded for C<errnum> zero
|
|
(meaning success), and if no useful message is available then a useless
|
|
string (currently empty) is returned.
|
|
|
|
SV* sv_string_from_errnum(int errnum, SV* tgtsv)
|
|
|
|
=for hackers
|
|
Found in file mg.c
|
|
|
|
=item SvUNLOCK
|
|
X<SvUNLOCK>
|
|
|
|
Releases a mutual exclusion lock on C<sv> if a suitable module
|
|
has been loaded.
|
|
|
|
void SvUNLOCK(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
|
|
=back
|
|
|
|
=head1 Memory Management
|
|
|
|
=over 8
|
|
|
|
=item Copy
|
|
X<Copy>
|
|
|
|
The XSUB-writer's interface to the C C<memcpy> function. The C<src> is the
|
|
source, C<dest> is the destination, C<nitems> is the number of items, and
|
|
C<type> is the type. May fail on overlapping copies. See also C<L</Move>>.
|
|
|
|
void Copy(void* src, void* dest, int nitems, type)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item CopyD
|
|
X<CopyD>
|
|
|
|
Like C<Copy> but returns C<dest>. Useful
|
|
for encouraging compilers to tail-call
|
|
optimise.
|
|
|
|
void * CopyD(void* src, void* dest, int nitems, type)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item Move
|
|
X<Move>
|
|
|
|
The XSUB-writer's interface to the C C<memmove> function. The C<src> is the
|
|
source, C<dest> is the destination, C<nitems> is the number of items, and
|
|
C<type> is the type. Can do overlapping moves. See also C<L</Copy>>.
|
|
|
|
void Move(void* src, void* dest, int nitems, type)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item MoveD
|
|
X<MoveD>
|
|
|
|
Like C<Move> but returns C<dest>. Useful
|
|
for encouraging compilers to tail-call
|
|
optimise.
|
|
|
|
void * MoveD(void* src, void* dest, int nitems, type)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item Newx
|
|
X<Newx>
|
|
|
|
The XSUB-writer's interface to the C C<malloc> function.
|
|
|
|
Memory obtained by this should B<ONLY> be freed with L</"Safefree">.
|
|
|
|
In 5.9.3, Newx() and friends replace the older New() API, and drops
|
|
the first parameter, I<x>, a debug aid which allowed callers to identify
|
|
themselves. This aid has been superseded by a new build option,
|
|
PERL_MEM_LOG (see L<perlhacktips/PERL_MEM_LOG>). The older API is still
|
|
there for use in XS modules supporting older perls.
|
|
|
|
void Newx(void* ptr, int nitems, type)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item Newxc
|
|
X<Newxc>
|
|
|
|
The XSUB-writer's interface to the C C<malloc> function, with
|
|
cast. See also C<L</Newx>>.
|
|
|
|
Memory obtained by this should B<ONLY> be freed with L</"Safefree">.
|
|
|
|
void Newxc(void* ptr, int nitems, type, cast)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item Newxz
|
|
X<Newxz>
|
|
|
|
The XSUB-writer's interface to the C C<malloc> function. The allocated
|
|
memory is zeroed with C<memzero>. See also C<L</Newx>>.
|
|
|
|
Memory obtained by this should B<ONLY> be freed with L</"Safefree">.
|
|
|
|
void Newxz(void* ptr, int nitems, type)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item Poison
|
|
X<Poison>
|
|
|
|
PoisonWith(0xEF) for catching access to freed memory.
|
|
|
|
void Poison(void* dest, int nitems, type)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item PoisonFree
|
|
X<PoisonFree>
|
|
|
|
PoisonWith(0xEF) for catching access to freed memory.
|
|
|
|
void PoisonFree(void* dest, int nitems, type)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item PoisonNew
|
|
X<PoisonNew>
|
|
|
|
PoisonWith(0xAB) for catching access to allocated but uninitialized memory.
|
|
|
|
void PoisonNew(void* dest, int nitems, type)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item PoisonWith
|
|
X<PoisonWith>
|
|
|
|
Fill up memory with a byte pattern (a byte repeated over and over
|
|
again) that hopefully catches attempts to access uninitialized memory.
|
|
|
|
void PoisonWith(void* dest, int nitems, type,
|
|
U8 byte)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item Renew
|
|
X<Renew>
|
|
|
|
The XSUB-writer's interface to the C C<realloc> function.
|
|
|
|
Memory obtained by this should B<ONLY> be freed with L</"Safefree">.
|
|
|
|
void Renew(void* ptr, int nitems, type)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item Renewc
|
|
X<Renewc>
|
|
|
|
The XSUB-writer's interface to the C C<realloc> function, with
|
|
cast.
|
|
|
|
Memory obtained by this should B<ONLY> be freed with L</"Safefree">.
|
|
|
|
void Renewc(void* ptr, int nitems, type, cast)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item Safefree
|
|
X<Safefree>
|
|
|
|
The XSUB-writer's interface to the C C<free> function.
|
|
|
|
This should B<ONLY> be used on memory obtained using L</"Newx"> and friends.
|
|
|
|
void Safefree(void* ptr)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item savepv
|
|
X<savepv>
|
|
|
|
Perl's version of C<strdup()>. Returns a pointer to a newly allocated
|
|
string which is a duplicate of C<pv>. The size of the string is
|
|
determined by C<strlen()>, which means it may not contain embedded C<NUL>
|
|
characters and must have a trailing C<NUL>. To prevent memory leaks, the
|
|
memory allocated for the new string needs to be freed when no longer needed.
|
|
This can be done with the L</C<Safefree>> function, or
|
|
L<C<SAVEFREEPV>|perlguts/SAVEFREEPV(p)>.
|
|
|
|
On some platforms, Windows for example, all allocated memory owned by a thread
|
|
is deallocated when that thread ends. So if you need that not to happen, you
|
|
need to use the shared memory functions, such as C<L</savesharedpv>>.
|
|
|
|
char* savepv(const char* pv)
|
|
|
|
=for hackers
|
|
Found in file util.c
|
|
|
|
=item savepvn
|
|
X<savepvn>
|
|
|
|
Perl's version of what C<strndup()> would be if it existed. Returns a
|
|
pointer to a newly allocated string which is a duplicate of the first
|
|
C<len> bytes from C<pv>, plus a trailing
|
|
C<NUL> byte. The memory allocated for
|
|
the new string can be freed with the C<Safefree()> function.
|
|
|
|
On some platforms, Windows for example, all allocated memory owned by a thread
|
|
is deallocated when that thread ends. So if you need that not to happen, you
|
|
need to use the shared memory functions, such as C<L</savesharedpvn>>.
|
|
|
|
char* savepvn(const char* pv, Size_t len)
|
|
|
|
=for hackers
|
|
Found in file util.c
|
|
|
|
=item savepvs
|
|
X<savepvs>
|
|
|
|
Like C<savepvn>, but takes a literal string instead of a
|
|
string/length pair.
|
|
|
|
char* savepvs("literal string")
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item savesharedpv
|
|
X<savesharedpv>
|
|
|
|
A version of C<savepv()> which allocates the duplicate string in memory
|
|
which is shared between threads.
|
|
|
|
char* savesharedpv(const char* pv)
|
|
|
|
=for hackers
|
|
Found in file util.c
|
|
|
|
=item savesharedpvn
|
|
X<savesharedpvn>
|
|
|
|
A version of C<savepvn()> which allocates the duplicate string in memory
|
|
which is shared between threads. (With the specific difference that a C<NULL>
|
|
pointer is not acceptable)
|
|
|
|
char* savesharedpvn(const char *const pv,
|
|
const STRLEN len)
|
|
|
|
=for hackers
|
|
Found in file util.c
|
|
|
|
=item savesharedpvs
|
|
X<savesharedpvs>
|
|
|
|
A version of C<savepvs()> which allocates the duplicate string in memory
|
|
which is shared between threads.
|
|
|
|
char* savesharedpvs("literal string")
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item savesharedsvpv
|
|
X<savesharedsvpv>
|
|
|
|
A version of C<savesharedpv()> which allocates the duplicate string in
|
|
memory which is shared between threads.
|
|
|
|
char* savesharedsvpv(SV *sv)
|
|
|
|
=for hackers
|
|
Found in file util.c
|
|
|
|
=item savesvpv
|
|
X<savesvpv>
|
|
|
|
A version of C<savepv()>/C<savepvn()> which gets the string to duplicate from
|
|
the passed in SV using C<SvPV()>
|
|
|
|
On some platforms, Windows for example, all allocated memory owned by a thread
|
|
is deallocated when that thread ends. So if you need that not to happen, you
|
|
need to use the shared memory functions, such as C<L</savesharedsvpv>>.
|
|
|
|
char* savesvpv(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file util.c
|
|
|
|
=item StructCopy
|
|
X<StructCopy>
|
|
|
|
This is an architecture-independent macro to copy one structure to another.
|
|
|
|
void StructCopy(type *src, type *dest, type)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item Zero
|
|
X<Zero>
|
|
|
|
The XSUB-writer's interface to the C C<memzero> function. The C<dest> is the
|
|
destination, C<nitems> is the number of items, and C<type> is the type.
|
|
|
|
void Zero(void* dest, int nitems, type)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item ZeroD
|
|
X<ZeroD>
|
|
|
|
Like C<Zero> but returns dest. Useful
|
|
for encouraging compilers to tail-call
|
|
optimise.
|
|
|
|
void * ZeroD(void* dest, int nitems, type)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
|
|
=back
|
|
|
|
=head1 Miscellaneous Functions
|
|
|
|
=over 8
|
|
|
|
=item dump_c_backtrace
|
|
X<dump_c_backtrace>
|
|
|
|
Dumps the C backtrace to the given C<fp>.
|
|
|
|
Returns true if a backtrace could be retrieved, false if not.
|
|
|
|
bool dump_c_backtrace(PerlIO* fp, int max_depth,
|
|
int skip)
|
|
|
|
=for hackers
|
|
Found in file util.c
|
|
|
|
=item fbm_compile
|
|
X<fbm_compile>
|
|
|
|
Analyzes the string in order to make fast searches on it using C<fbm_instr()>
|
|
-- the Boyer-Moore algorithm.
|
|
|
|
void fbm_compile(SV* sv, U32 flags)
|
|
|
|
=for hackers
|
|
Found in file util.c
|
|
|
|
=item fbm_instr
|
|
X<fbm_instr>
|
|
|
|
Returns the location of the SV in the string delimited by C<big> and
|
|
C<bigend> (C<bigend>) is the char following the last char).
|
|
It returns C<NULL> if the string can't be found. The C<sv>
|
|
does not have to be C<fbm_compiled>, but the search will not be as fast
|
|
then.
|
|
|
|
char* fbm_instr(unsigned char* big,
|
|
unsigned char* bigend, SV* littlestr,
|
|
U32 flags)
|
|
|
|
=for hackers
|
|
Found in file util.c
|
|
|
|
=item foldEQ
|
|
X<foldEQ>
|
|
|
|
Returns true if the leading C<len> bytes of the strings C<s1> and C<s2> are the
|
|
same
|
|
case-insensitively; false otherwise. Uppercase and lowercase ASCII range bytes
|
|
match themselves and their opposite case counterparts. Non-cased and non-ASCII
|
|
range bytes match only themselves.
|
|
|
|
I32 foldEQ(const char* a, const char* b, I32 len)
|
|
|
|
=for hackers
|
|
Found in file inline.h
|
|
|
|
=item foldEQ_locale
|
|
X<foldEQ_locale>
|
|
|
|
Returns true if the leading C<len> bytes of the strings C<s1> and C<s2> are the
|
|
same case-insensitively in the current locale; false otherwise.
|
|
|
|
I32 foldEQ_locale(const char* a, const char* b,
|
|
I32 len)
|
|
|
|
=for hackers
|
|
Found in file inline.h
|
|
|
|
=item form
|
|
X<form>
|
|
|
|
Takes a sprintf-style format pattern and conventional
|
|
(non-SV) arguments and returns the formatted string.
|
|
|
|
(char *) Perl_form(pTHX_ const char* pat, ...)
|
|
|
|
can be used any place a string (char *) is required:
|
|
|
|
char * s = Perl_form("%d.%d",major,minor);
|
|
|
|
Uses a single private buffer so if you want to format several strings you
|
|
must explicitly copy the earlier strings away (and free the copies when you
|
|
are done).
|
|
|
|
char* form(const char* pat, ...)
|
|
|
|
=for hackers
|
|
Found in file util.c
|
|
|
|
=item getcwd_sv
|
|
X<getcwd_sv>
|
|
|
|
Fill C<sv> with current working directory
|
|
|
|
int getcwd_sv(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file util.c
|
|
|
|
=item get_c_backtrace_dump
|
|
X<get_c_backtrace_dump>
|
|
|
|
Returns a SV containing a dump of C<depth> frames of the call stack, skipping
|
|
the C<skip> innermost ones. C<depth> of 20 is usually enough.
|
|
|
|
The appended output looks like:
|
|
|
|
...
|
|
1 10e004812:0082 Perl_croak util.c:1716 /usr/bin/perl
|
|
2 10df8d6d2:1d72 perl_parse perl.c:3975 /usr/bin/perl
|
|
...
|
|
|
|
The fields are tab-separated. The first column is the depth (zero
|
|
being the innermost non-skipped frame). In the hex:offset, the hex is
|
|
where the program counter was in C<S_parse_body>, and the :offset (might
|
|
be missing) tells how much inside the C<S_parse_body> the program counter was.
|
|
|
|
The C<util.c:1716> is the source code file and line number.
|
|
|
|
The F</usr/bin/perl> is obvious (hopefully).
|
|
|
|
Unknowns are C<"-">. Unknowns can happen unfortunately quite easily:
|
|
if the platform doesn't support retrieving the information;
|
|
if the binary is missing the debug information;
|
|
if the optimizer has transformed the code by for example inlining.
|
|
|
|
SV* get_c_backtrace_dump(int max_depth, int skip)
|
|
|
|
=for hackers
|
|
Found in file util.c
|
|
|
|
=item ibcmp
|
|
X<ibcmp>
|
|
|
|
This is a synonym for S<C<(! foldEQ())>>
|
|
|
|
I32 ibcmp(const char* a, const char* b, I32 len)
|
|
|
|
=for hackers
|
|
Found in file util.h
|
|
|
|
=item ibcmp_locale
|
|
X<ibcmp_locale>
|
|
|
|
This is a synonym for S<C<(! foldEQ_locale())>>
|
|
|
|
I32 ibcmp_locale(const char* a, const char* b,
|
|
I32 len)
|
|
|
|
=for hackers
|
|
Found in file util.h
|
|
|
|
=item instr
|
|
X<instr>
|
|
|
|
Same as L<strstr(3)>, which finds and returns a pointer to the first occurrence
|
|
of the NUL-terminated substring C<little> in the NUL-terminated string C<big>,
|
|
returning NULL if not found. The terminating NUL bytes are not compared.
|
|
|
|
char* instr(const char* big, const char* little)
|
|
|
|
=for hackers
|
|
Found in file util.h
|
|
|
|
=item IS_SAFE_SYSCALL
|
|
X<IS_SAFE_SYSCALL>
|
|
|
|
Same as L</is_safe_syscall>.
|
|
|
|
bool IS_SAFE_SYSCALL(NN const char *pv, STRLEN len,
|
|
NN const char *what,
|
|
NN const char *op_name)
|
|
|
|
=for hackers
|
|
Found in file perl.h
|
|
|
|
=item is_safe_syscall
|
|
X<is_safe_syscall>
|
|
|
|
Test that the given C<pv> (with length C<len>) doesn't contain any internal
|
|
C<NUL> characters.
|
|
If it does, set C<errno> to C<ENOENT>, optionally warn using the C<syscalls>
|
|
category, and return FALSE.
|
|
|
|
Return TRUE if the name is safe.
|
|
|
|
C<what> and C<op_name> are used in any warning.
|
|
|
|
Used by the C<IS_SAFE_SYSCALL()> macro.
|
|
|
|
bool is_safe_syscall(const char *pv, STRLEN len,
|
|
const char *what,
|
|
const char *op_name)
|
|
|
|
=for hackers
|
|
Found in file inline.h
|
|
|
|
=item LIKELY
|
|
X<LIKELY>
|
|
|
|
Returns the input unchanged, but at the same time it gives a branch prediction
|
|
hint to the compiler that this condition is likely to be true.
|
|
|
|
=for hackers
|
|
Found in file perl.h
|
|
|
|
=item memCHRs
|
|
X<memCHRs>
|
|
|
|
Returns the position of the first occurence of the byte C<c> in the literal
|
|
string C<"list">, or NULL if C<c> doesn't appear in C<"list">. All bytes are
|
|
treated as unsigned char. Thus this macro can be used to determine if C<c> is
|
|
in a set of particular characters. Unlike L<strchr(3)>, it works even if C<c>
|
|
is C<NUL> (and the set doesn't include C<NUL>).
|
|
|
|
bool memCHRs("list", char c)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item memEQ
|
|
X<memEQ>
|
|
|
|
Test two buffers (which may contain embedded C<NUL> characters, to see if they
|
|
are equal. The C<len> parameter indicates the number of bytes to compare.
|
|
Returns zero if equal, or non-zero if non-equal.
|
|
|
|
bool memEQ(char* s1, char* s2, STRLEN len)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item memEQs
|
|
X<memEQs>
|
|
|
|
Like L</memEQ>, but the second string is a literal enclosed in double quotes,
|
|
C<l1> gives the number of bytes in C<s1>.
|
|
Returns zero if equal, or non-zero if non-equal.
|
|
|
|
bool memEQs(char* s1, STRLEN l1, "s2")
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item memNE
|
|
X<memNE>
|
|
|
|
Test two buffers (which may contain embedded C<NUL> characters, to see if they
|
|
are not equal. The C<len> parameter indicates the number of bytes to compare.
|
|
Returns zero if non-equal, or non-zero if equal.
|
|
|
|
bool memNE(char* s1, char* s2, STRLEN len)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item memNEs
|
|
X<memNEs>
|
|
|
|
Like L</memNE>, but the second string is a literal enclosed in double quotes,
|
|
C<l1> gives the number of bytes in C<s1>.
|
|
Returns zero if non-equal, or zero if non-equal.
|
|
|
|
bool memNEs(char* s1, STRLEN l1, "s2")
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item mess
|
|
X<mess>
|
|
|
|
Take a sprintf-style format pattern and argument list. These are used to
|
|
generate a string message. If the message does not end with a newline,
|
|
then it will be extended with some indication of the current location
|
|
in the code, as described for L</mess_sv>.
|
|
|
|
Normally, the resulting message is returned in a new mortal SV.
|
|
During global destruction a single SV may be shared between uses of
|
|
this function.
|
|
|
|
SV* mess(const char* pat, ...)
|
|
|
|
=for hackers
|
|
Found in file util.c
|
|
|
|
=item mess_sv
|
|
X<mess_sv>
|
|
|
|
Expands a message, intended for the user, to include an indication of
|
|
the current location in the code, if the message does not already appear
|
|
to be complete.
|
|
|
|
C<basemsg> is the initial message or object. If it is a reference, it
|
|
will be used as-is and will be the result of this function. Otherwise it
|
|
is used as a string, and if it already ends with a newline, it is taken
|
|
to be complete, and the result of this function will be the same string.
|
|
If the message does not end with a newline, then a segment such as C<at
|
|
foo.pl line 37> will be appended, and possibly other clauses indicating
|
|
the current state of execution. The resulting message will end with a
|
|
dot and a newline.
|
|
|
|
Normally, the resulting message is returned in a new mortal SV.
|
|
During global destruction a single SV may be shared between uses of this
|
|
function. If C<consume> is true, then the function is permitted (but not
|
|
required) to modify and return C<basemsg> instead of allocating a new SV.
|
|
|
|
SV* mess_sv(SV* basemsg, bool consume)
|
|
|
|
=for hackers
|
|
Found in file util.c
|
|
|
|
=item my_snprintf
|
|
X<my_snprintf>
|
|
|
|
The C library C<snprintf> functionality, if available and
|
|
standards-compliant (uses C<vsnprintf>, actually). However, if the
|
|
C<vsnprintf> is not available, will unfortunately use the unsafe
|
|
C<vsprintf> which can overrun the buffer (there is an overrun check,
|
|
but that may be too late). Consider using C<sv_vcatpvf> instead, or
|
|
getting C<vsnprintf>.
|
|
|
|
int my_snprintf(char *buffer, const Size_t len,
|
|
const char *format, ...)
|
|
|
|
=for hackers
|
|
Found in file util.c
|
|
|
|
=item my_sprintf
|
|
X<my_sprintf>
|
|
|
|
|
|
DEPRECATED! It is planned to remove this function from a
|
|
future release of Perl. Do not use it for new code; remove it from
|
|
existing code.
|
|
|
|
|
|
Do NOT use this due to the possibility of overflowing C<buffer>. Instead use
|
|
my_snprintf()
|
|
|
|
int my_sprintf(NN char *buffer, NN const char *pat,
|
|
...)
|
|
|
|
=for hackers
|
|
Found in file perl.h
|
|
|
|
=item my_strlcat
|
|
X<my_strlcat>
|
|
|
|
The C library C<strlcat> if available, or a Perl implementation of it.
|
|
This operates on C C<NUL>-terminated strings.
|
|
|
|
C<my_strlcat()> appends string C<src> to the end of C<dst>. It will append at
|
|
most S<C<size - strlen(dst) - 1>> characters. It will then C<NUL>-terminate,
|
|
unless C<size> is 0 or the original C<dst> string was longer than C<size> (in
|
|
practice this should not happen as it means that either C<size> is incorrect or
|
|
that C<dst> is not a proper C<NUL>-terminated string).
|
|
|
|
Note that C<size> is the full size of the destination buffer and
|
|
the result is guaranteed to be C<NUL>-terminated if there is room. Note that
|
|
room for the C<NUL> should be included in C<size>.
|
|
|
|
The return value is the total length that C<dst> would have if C<size> is
|
|
sufficiently large. Thus it is the initial length of C<dst> plus the length of
|
|
C<src>. If C<size> is smaller than the return, the excess was not appended.
|
|
|
|
Size_t my_strlcat(char *dst, const char *src,
|
|
Size_t size)
|
|
|
|
=for hackers
|
|
Found in file util.c
|
|
|
|
=item my_strlcpy
|
|
X<my_strlcpy>
|
|
|
|
The C library C<strlcpy> if available, or a Perl implementation of it.
|
|
This operates on C C<NUL>-terminated strings.
|
|
|
|
C<my_strlcpy()> copies up to S<C<size - 1>> characters from the string C<src>
|
|
to C<dst>, C<NUL>-terminating the result if C<size> is not 0.
|
|
|
|
The return value is the total length C<src> would be if the copy completely
|
|
succeeded. If it is larger than C<size>, the excess was not copied.
|
|
|
|
Size_t my_strlcpy(char *dst, const char *src,
|
|
Size_t size)
|
|
|
|
=for hackers
|
|
Found in file util.c
|
|
|
|
=item my_strnlen
|
|
X<my_strnlen>
|
|
|
|
The C library C<strnlen> if available, or a Perl implementation of it.
|
|
|
|
C<my_strnlen()> computes the length of the string, up to C<maxlen>
|
|
characters. It will never attempt to address more than C<maxlen>
|
|
characters, making it suitable for use with strings that are not
|
|
guaranteed to be NUL-terminated.
|
|
|
|
Size_t my_strnlen(const char *str, Size_t maxlen)
|
|
|
|
=for hackers
|
|
Found in file inline.h
|
|
|
|
=item my_vsnprintf
|
|
X<my_vsnprintf>
|
|
|
|
The C library C<vsnprintf> if available and standards-compliant.
|
|
However, if the C<vsnprintf> is not available, will unfortunately
|
|
use the unsafe C<vsprintf> which can overrun the buffer (there is an
|
|
overrun check, but that may be too late). Consider using
|
|
C<sv_vcatpvf> instead, or getting C<vsnprintf>.
|
|
|
|
int my_vsnprintf(char *buffer, const Size_t len,
|
|
const char *format, va_list ap)
|
|
|
|
=for hackers
|
|
Found in file util.c
|
|
|
|
=item ninstr
|
|
X<ninstr>
|
|
|
|
Find the first (leftmost) occurrence of a sequence of bytes within another
|
|
sequence. This is the Perl version of C<strstr()>, extended to handle
|
|
arbitrary sequences, potentially containing embedded C<NUL> characters (C<NUL>
|
|
is what the initial C<n> in the function name stands for; some systems have an
|
|
equivalent, C<memmem()>, but with a somewhat different API).
|
|
|
|
Another way of thinking about this function is finding a needle in a haystack.
|
|
C<big> points to the first byte in the haystack. C<big_end> points to one byte
|
|
beyond the final byte in the haystack. C<little> points to the first byte in
|
|
the needle. C<little_end> points to one byte beyond the final byte in the
|
|
needle. All the parameters must be non-C<NULL>.
|
|
|
|
The function returns C<NULL> if there is no occurrence of C<little> within
|
|
C<big>. If C<little> is the empty string, C<big> is returned.
|
|
|
|
Because this function operates at the byte level, and because of the inherent
|
|
characteristics of UTF-8 (or UTF-EBCDIC), it will work properly if both the
|
|
needle and the haystack are strings with the same UTF-8ness, but not if the
|
|
UTF-8ness differs.
|
|
|
|
char* ninstr(const char* big, const char* bigend,
|
|
const char* little, const char* lend)
|
|
|
|
=for hackers
|
|
Found in file util.c
|
|
|
|
=item PERL_SYS_INIT
|
|
X<PERL_SYS_INIT>
|
|
|
|
Provides system-specific tune up of the C runtime environment necessary to
|
|
run Perl interpreters. This should be called only once, before creating
|
|
any Perl interpreters.
|
|
|
|
void PERL_SYS_INIT(int *argc, char*** argv)
|
|
|
|
=for hackers
|
|
Found in file perl.h
|
|
|
|
=item PERL_SYS_INIT3
|
|
X<PERL_SYS_INIT3>
|
|
|
|
Provides system-specific tune up of the C runtime environment necessary to
|
|
run Perl interpreters. This should be called only once, before creating
|
|
any Perl interpreters.
|
|
|
|
void PERL_SYS_INIT3(int *argc, char*** argv,
|
|
char*** env)
|
|
|
|
=for hackers
|
|
Found in file perl.h
|
|
|
|
=item PERL_SYS_TERM
|
|
X<PERL_SYS_TERM>
|
|
|
|
Provides system-specific clean up of the C runtime environment after
|
|
running Perl interpreters. This should be called only once, after
|
|
freeing any remaining Perl interpreters.
|
|
|
|
void PERL_SYS_TERM()
|
|
|
|
=for hackers
|
|
Found in file perl.h
|
|
|
|
=item READ_XDIGIT
|
|
X<READ_XDIGIT>
|
|
|
|
Returns the value of an ASCII-range hex digit and advances the string pointer.
|
|
Behaviour is only well defined when isXDIGIT(*str) is true.
|
|
|
|
U8 READ_XDIGIT(char str*)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item rninstr
|
|
X<rninstr>
|
|
|
|
Like C<L</ninstr>>, but instead finds the final (rightmost) occurrence of a
|
|
sequence of bytes within another sequence, returning C<NULL> if there is no
|
|
such occurrence.
|
|
|
|
char* rninstr(const char* big, const char* bigend,
|
|
const char* little, const char* lend)
|
|
|
|
=for hackers
|
|
Found in file util.c
|
|
|
|
=item STMT_START
|
|
X<STMT_START>
|
|
|
|
STMT_START { statements; } STMT_END;
|
|
|
|
can be used as a single statement, as in
|
|
|
|
if (x) STMT_START { ... } STMT_END; else ...
|
|
|
|
These are often used in macro definitions. Note that you can't return a value
|
|
out of them.
|
|
|
|
=for hackers
|
|
Found in file perl.h
|
|
|
|
=item strEQ
|
|
X<strEQ>
|
|
|
|
Test two C<NUL>-terminated strings to see if they are equal. Returns true or
|
|
false.
|
|
|
|
bool strEQ(char* s1, char* s2)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item strGE
|
|
X<strGE>
|
|
|
|
Test two C<NUL>-terminated strings to see if the first, C<s1>, is greater than
|
|
or equal to the second, C<s2>. Returns true or false.
|
|
|
|
bool strGE(char* s1, char* s2)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item strGT
|
|
X<strGT>
|
|
|
|
Test two C<NUL>-terminated strings to see if the first, C<s1>, is greater than
|
|
the second, C<s2>. Returns true or false.
|
|
|
|
bool strGT(char* s1, char* s2)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item strLE
|
|
X<strLE>
|
|
|
|
Test two C<NUL>-terminated strings to see if the first, C<s1>, is less than or
|
|
equal to the second, C<s2>. Returns true or false.
|
|
|
|
bool strLE(char* s1, char* s2)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item strLT
|
|
X<strLT>
|
|
|
|
Test two C<NUL>-terminated strings to see if the first, C<s1>, is less than the
|
|
second, C<s2>. Returns true or false.
|
|
|
|
bool strLT(char* s1, char* s2)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item strNE
|
|
X<strNE>
|
|
|
|
Test two C<NUL>-terminated strings to see if they are different. Returns true
|
|
or false.
|
|
|
|
bool strNE(char* s1, char* s2)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item strnEQ
|
|
X<strnEQ>
|
|
|
|
Test two C<NUL>-terminated strings to see if they are equal. The C<len>
|
|
parameter indicates the number of bytes to compare. Returns true or false. (A
|
|
wrapper for C<strncmp>).
|
|
|
|
bool strnEQ(char* s1, char* s2, STRLEN len)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item strnNE
|
|
X<strnNE>
|
|
|
|
Test two C<NUL>-terminated strings to see if they are different. The C<len>
|
|
parameter indicates the number of bytes to compare. Returns true or false. (A
|
|
wrapper for C<strncmp>).
|
|
|
|
bool strnNE(char* s1, char* s2, STRLEN len)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item sv_destroyable
|
|
X<sv_destroyable>
|
|
|
|
Dummy routine which reports that object can be destroyed when there is no
|
|
sharing module present. It ignores its single SV argument, and returns
|
|
'true'. Exists to avoid test for a C<NULL> function pointer and because it
|
|
could potentially warn under some level of strict-ness.
|
|
|
|
bool sv_destroyable(SV *sv)
|
|
|
|
=for hackers
|
|
Found in file util.c
|
|
|
|
=item sv_nosharing
|
|
X<sv_nosharing>
|
|
|
|
Dummy routine which "shares" an SV when there is no sharing module present.
|
|
Or "locks" it. Or "unlocks" it. In other
|
|
words, ignores its single SV argument.
|
|
Exists to avoid test for a C<NULL> function pointer and because it could
|
|
potentially warn under some level of strict-ness.
|
|
|
|
void sv_nosharing(SV *sv)
|
|
|
|
=for hackers
|
|
Found in file util.c
|
|
|
|
=item UNLIKELY
|
|
X<UNLIKELY>
|
|
|
|
Returns the input unchanged, but at the same time it gives a branch prediction
|
|
hint to the compiler that this condition is likely to be false.
|
|
|
|
=for hackers
|
|
Found in file perl.h
|
|
|
|
=item vmess
|
|
X<vmess>
|
|
|
|
C<pat> and C<args> are a sprintf-style format pattern and encapsulated
|
|
argument list, respectively. These are used to generate a string message. If
|
|
the
|
|
message does not end with a newline, then it will be extended with
|
|
some indication of the current location in the code, as described for
|
|
L</mess_sv>.
|
|
|
|
Normally, the resulting message is returned in a new mortal SV.
|
|
During global destruction a single SV may be shared between uses of
|
|
this function.
|
|
|
|
SV* vmess(const char* pat, va_list* args)
|
|
|
|
=for hackers
|
|
Found in file util.c
|
|
|
|
|
|
=back
|
|
|
|
=head1 MRO Functions
|
|
|
|
These functions are related to the method resolution order of perl classes
|
|
Also see L<perlmroapi>.
|
|
|
|
|
|
=over 8
|
|
|
|
=item mro_get_linear_isa
|
|
X<mro_get_linear_isa>
|
|
|
|
Returns the mro linearisation for the given stash. By default, this
|
|
will be whatever C<mro_get_linear_isa_dfs> returns unless some
|
|
other MRO is in effect for the stash. The return value is a
|
|
read-only AV*.
|
|
|
|
You are responsible for C<SvREFCNT_inc()> on the
|
|
return value if you plan to store it anywhere
|
|
semi-permanently (otherwise it might be deleted
|
|
out from under you the next time the cache is
|
|
invalidated).
|
|
|
|
AV* mro_get_linear_isa(HV* stash)
|
|
|
|
=for hackers
|
|
Found in file mro_core.c
|
|
|
|
=item mro_method_changed_in
|
|
X<mro_method_changed_in>
|
|
|
|
Invalidates method caching on any child classes
|
|
of the given stash, so that they might notice
|
|
the changes in this one.
|
|
|
|
Ideally, all instances of C<PL_sub_generation++> in
|
|
perl source outside of F<mro.c> should be
|
|
replaced by calls to this.
|
|
|
|
Perl automatically handles most of the common
|
|
ways a method might be redefined. However, there
|
|
are a few ways you could change a method in a stash
|
|
without the cache code noticing, in which case you
|
|
need to call this method afterwards:
|
|
|
|
1) Directly manipulating the stash HV entries from
|
|
XS code.
|
|
|
|
2) Assigning a reference to a readonly scalar
|
|
constant into a stash entry in order to create
|
|
a constant subroutine (like F<constant.pm>
|
|
does).
|
|
|
|
This same method is available from pure perl
|
|
via, C<mro::method_changed_in(classname)>.
|
|
|
|
void mro_method_changed_in(HV* stash)
|
|
|
|
=for hackers
|
|
Found in file mro_core.c
|
|
|
|
=item mro_register
|
|
X<mro_register>
|
|
|
|
Registers a custom mro plugin. See L<perlmroapi> for details on this and other
|
|
mro functions.
|
|
|
|
NOTE: this function must be explicitly called as Perl_mro_register with an aTHX_ parameter.
|
|
|
|
void Perl_mro_register(pTHX_
|
|
const struct mro_alg *mro)
|
|
|
|
=for hackers
|
|
Found in file mro_core.c
|
|
|
|
|
|
=back
|
|
|
|
=head1 Multicall Functions
|
|
|
|
=over 8
|
|
|
|
=item dMULTICALL
|
|
X<dMULTICALL>
|
|
|
|
Declare local variables for a multicall. See L<perlcall/LIGHTWEIGHT CALLBACKS>.
|
|
|
|
dMULTICALL;
|
|
|
|
=for hackers
|
|
Found in file cop.h
|
|
|
|
=item MULTICALL
|
|
X<MULTICALL>
|
|
|
|
Make a lightweight callback. See L<perlcall/LIGHTWEIGHT CALLBACKS>.
|
|
|
|
MULTICALL;
|
|
|
|
=for hackers
|
|
Found in file cop.h
|
|
|
|
=item POP_MULTICALL
|
|
X<POP_MULTICALL>
|
|
|
|
Closing bracket for a lightweight callback.
|
|
See L<perlcall/LIGHTWEIGHT CALLBACKS>.
|
|
|
|
POP_MULTICALL;
|
|
|
|
=for hackers
|
|
Found in file cop.h
|
|
|
|
=item PUSH_MULTICALL
|
|
X<PUSH_MULTICALL>
|
|
|
|
Opening bracket for a lightweight callback.
|
|
See L<perlcall/LIGHTWEIGHT CALLBACKS>.
|
|
|
|
PUSH_MULTICALL(CV* the_cv);
|
|
|
|
=for hackers
|
|
Found in file cop.h
|
|
|
|
|
|
=back
|
|
|
|
=head1 Numeric functions
|
|
|
|
=over 8
|
|
|
|
=item grok_bin
|
|
X<grok_bin>
|
|
|
|
converts a string representing a binary number to numeric form.
|
|
|
|
On entry C<start> and C<*len_p> give the string to scan, C<*flags> gives
|
|
conversion flags, and C<result> should be C<NULL> or a pointer to an NV. The
|
|
scan stops at the end of the string, or at just before the first invalid
|
|
character. Unless C<PERL_SCAN_SILENT_ILLDIGIT> is set in C<*flags>,
|
|
encountering an invalid character (except NUL) will also trigger a warning. On
|
|
return C<*len_p> is set to the length of the scanned string, and C<*flags>
|
|
gives output flags.
|
|
|
|
If the value is <= C<UV_MAX> it is returned as a UV, the output flags are clear,
|
|
and nothing is written to C<*result>. If the value is > C<UV_MAX>, C<grok_bin>
|
|
returns C<UV_MAX>, sets C<PERL_SCAN_GREATER_THAN_UV_MAX> in the output flags,
|
|
and writes an approximation of the correct value into C<*result> (which is an
|
|
NV; or the approximation is discarded if C<result> is NULL).
|
|
|
|
The binary number may optionally be prefixed with C<"0b"> or C<"b"> unless
|
|
C<PERL_SCAN_DISALLOW_PREFIX> is set in C<*flags> on entry.
|
|
|
|
If C<PERL_SCAN_ALLOW_UNDERSCORES> is set in C<*flags> then any or all pairs of
|
|
digits may be separated from each other by a single underscore; also a single
|
|
leading underscore is accepted.
|
|
|
|
UV grok_bin(const char* start, STRLEN* len_p,
|
|
I32* flags, NV *result)
|
|
|
|
=for hackers
|
|
Found in file numeric.c
|
|
|
|
=item grok_hex
|
|
X<grok_hex>
|
|
|
|
converts a string representing a hex number to numeric form.
|
|
|
|
On entry C<start> and C<*len_p> give the string to scan, C<*flags> gives
|
|
conversion flags, and C<result> should be C<NULL> or a pointer to an NV. The
|
|
scan stops at the end of the string, or at just before the first invalid
|
|
character. Unless C<PERL_SCAN_SILENT_ILLDIGIT> is set in C<*flags>,
|
|
encountering an invalid character (except NUL) will also trigger a warning. On
|
|
return C<*len_p> is set to the length of the scanned string, and C<*flags>
|
|
gives output flags.
|
|
|
|
If the value is <= C<UV_MAX> it is returned as a UV, the output flags are clear,
|
|
and nothing is written to C<*result>. If the value is > C<UV_MAX>, C<grok_hex>
|
|
returns C<UV_MAX>, sets C<PERL_SCAN_GREATER_THAN_UV_MAX> in the output flags,
|
|
and writes an approximation of the correct value into C<*result> (which is an
|
|
NV; or the approximation is discarded if C<result> is NULL).
|
|
|
|
The hex number may optionally be prefixed with C<"0x"> or C<"x"> unless
|
|
C<PERL_SCAN_DISALLOW_PREFIX> is set in C<*flags> on entry.
|
|
|
|
If C<PERL_SCAN_ALLOW_UNDERSCORES> is set in C<*flags> then any or all pairs of
|
|
digits may be separated from each other by a single underscore; also a single
|
|
leading underscore is accepted.
|
|
|
|
UV grok_hex(const char* start, STRLEN* len_p,
|
|
I32* flags, NV *result)
|
|
|
|
=for hackers
|
|
Found in file numeric.c
|
|
|
|
=item grok_infnan
|
|
X<grok_infnan>
|
|
|
|
Helper for C<grok_number()>, accepts various ways of spelling "infinity"
|
|
or "not a number", and returns one of the following flag combinations:
|
|
|
|
IS_NUMBER_INFINITY
|
|
IS_NUMBER_NAN
|
|
IS_NUMBER_INFINITY | IS_NUMBER_NEG
|
|
IS_NUMBER_NAN | IS_NUMBER_NEG
|
|
0
|
|
|
|
possibly |-ed with C<IS_NUMBER_TRAILING>.
|
|
|
|
If an infinity or a not-a-number is recognized, C<*sp> will point to
|
|
one byte past the end of the recognized string. If the recognition fails,
|
|
zero is returned, and C<*sp> will not move.
|
|
|
|
int grok_infnan(const char** sp, const char *send)
|
|
|
|
=for hackers
|
|
Found in file numeric.c
|
|
|
|
=item grok_number
|
|
X<grok_number>
|
|
|
|
Identical to C<grok_number_flags()> with C<flags> set to zero.
|
|
|
|
int grok_number(const char *pv, STRLEN len,
|
|
UV *valuep)
|
|
|
|
=for hackers
|
|
Found in file numeric.c
|
|
|
|
=item grok_number_flags
|
|
X<grok_number_flags>
|
|
|
|
Recognise (or not) a number. The type of the number is returned
|
|
(0 if unrecognised), otherwise it is a bit-ORed combination of
|
|
C<IS_NUMBER_IN_UV>, C<IS_NUMBER_GREATER_THAN_UV_MAX>, C<IS_NUMBER_NOT_INT>,
|
|
C<IS_NUMBER_NEG>, C<IS_NUMBER_INFINITY>, C<IS_NUMBER_NAN> (defined in perl.h).
|
|
|
|
If the value of the number can fit in a UV, it is returned in C<*valuep>.
|
|
C<IS_NUMBER_IN_UV> will be set to indicate that C<*valuep> is valid, C<IS_NUMBER_IN_UV>
|
|
will never be set unless C<*valuep> is valid, but C<*valuep> may have been assigned
|
|
to during processing even though C<IS_NUMBER_IN_UV> is not set on return.
|
|
If C<valuep> is C<NULL>, C<IS_NUMBER_IN_UV> will be set for the same cases as when
|
|
C<valuep> is non-C<NULL>, but no actual assignment (or SEGV) will occur.
|
|
|
|
C<IS_NUMBER_NOT_INT> will be set with C<IS_NUMBER_IN_UV> if trailing decimals were
|
|
seen (in which case C<*valuep> gives the true value truncated to an integer), and
|
|
C<IS_NUMBER_NEG> if the number is negative (in which case C<*valuep> holds the
|
|
absolute value). C<IS_NUMBER_IN_UV> is not set if e notation was used or the
|
|
number is larger than a UV.
|
|
|
|
C<flags> allows only C<PERL_SCAN_TRAILING>, which allows for trailing
|
|
non-numeric text on an otherwise successful I<grok>, setting
|
|
C<IS_NUMBER_TRAILING> on the result.
|
|
|
|
int grok_number_flags(const char *pv, STRLEN len,
|
|
UV *valuep, U32 flags)
|
|
|
|
=for hackers
|
|
Found in file numeric.c
|
|
|
|
=item GROK_NUMERIC_RADIX
|
|
X<GROK_NUMERIC_RADIX>
|
|
|
|
A synonym for L</grok_numeric_radix>
|
|
|
|
bool GROK_NUMERIC_RADIX(NN const char **sp,
|
|
NN const char *send)
|
|
|
|
=for hackers
|
|
Found in file perl.h
|
|
|
|
=item grok_numeric_radix
|
|
X<grok_numeric_radix>
|
|
|
|
Scan and skip for a numeric decimal separator (radix).
|
|
|
|
bool grok_numeric_radix(const char **sp,
|
|
const char *send)
|
|
|
|
=for hackers
|
|
Found in file numeric.c
|
|
|
|
=item grok_oct
|
|
X<grok_oct>
|
|
|
|
converts a string representing an octal number to numeric form.
|
|
|
|
On entry C<start> and C<*len_p> give the string to scan, C<*flags> gives
|
|
conversion flags, and C<result> should be C<NULL> or a pointer to an NV. The
|
|
scan stops at the end of the string, or at just before the first invalid
|
|
character. Unless C<PERL_SCAN_SILENT_ILLDIGIT> is set in C<*flags>,
|
|
encountering an invalid character (except NUL) will also trigger a warning. On
|
|
return C<*len_p> is set to the length of the scanned string, and C<*flags>
|
|
gives output flags.
|
|
|
|
If the value is <= C<UV_MAX> it is returned as a UV, the output flags are clear,
|
|
and nothing is written to C<*result>. If the value is > C<UV_MAX>, C<grok_oct>
|
|
returns C<UV_MAX>, sets C<PERL_SCAN_GREATER_THAN_UV_MAX> in the output flags,
|
|
and writes an approximation of the correct value into C<*result> (which is an
|
|
NV; or the approximation is discarded if C<result> is NULL).
|
|
|
|
If C<PERL_SCAN_ALLOW_UNDERSCORES> is set in C<*flags> then any or all pairs of
|
|
digits may be separated from each other by a single underscore; also a single
|
|
leading underscore is accepted.
|
|
|
|
The C<PERL_SCAN_DISALLOW_PREFIX> flag is always treated as being set for
|
|
this function.
|
|
|
|
UV grok_oct(const char* start, STRLEN* len_p,
|
|
I32* flags, NV *result)
|
|
|
|
=for hackers
|
|
Found in file numeric.c
|
|
|
|
=item isinfnan
|
|
X<isinfnan>
|
|
|
|
C<Perl_isinfnan()> is a utility function that returns true if the NV
|
|
argument is either an infinity or a C<NaN>, false otherwise. To test
|
|
in more detail, use C<Perl_isinf()> and C<Perl_isnan()>.
|
|
|
|
This is also the logical inverse of Perl_isfinite().
|
|
|
|
bool isinfnan(NV nv)
|
|
|
|
=for hackers
|
|
Found in file numeric.c
|
|
|
|
=item IS_NUMBER_GREATER_THAN_UV_MAX
|
|
X<IS_NUMBER_GREATER_THAN_UV_MAX>
|
|
bool IS_NUMBER_GREATER_THAN_UV_MAX
|
|
|
|
=for hackers
|
|
Found in file numeric.c
|
|
|
|
=item IS_NUMBER_INFINITY
|
|
X<IS_NUMBER_INFINITY>
|
|
bool IS_NUMBER_INFINITY
|
|
|
|
=for hackers
|
|
Found in file numeric.c
|
|
|
|
=item IS_NUMBER_IN_UV
|
|
X<IS_NUMBER_IN_UV>
|
|
bool IS_NUMBER_IN_UV
|
|
|
|
=for hackers
|
|
Found in file numeric.c
|
|
|
|
=item IS_NUMBER_NAN
|
|
X<IS_NUMBER_NAN>
|
|
bool IS_NUMBER_NAN
|
|
|
|
=for hackers
|
|
Found in file numeric.c
|
|
|
|
=item IS_NUMBER_NEG
|
|
X<IS_NUMBER_NEG>
|
|
bool IS_NUMBER_NEG
|
|
|
|
=for hackers
|
|
Found in file numeric.c
|
|
|
|
=item IS_NUMBER_NOT_INT
|
|
X<IS_NUMBER_NOT_INT>
|
|
|
|
bool IS_NUMBER_NOT_INT
|
|
|
|
=for hackers
|
|
Found in file numeric.c
|
|
|
|
=item my_strtod
|
|
X<my_strtod>
|
|
|
|
This function is equivalent to the libc strtod() function, and is available
|
|
even on platforms that lack plain strtod(). Its return value is the best
|
|
available precision depending on platform capabilities and F<Configure>
|
|
options.
|
|
|
|
It properly handles the locale radix character, meaning it expects a dot except
|
|
when called from within the scope of S<C<use locale>>, in which case the radix
|
|
character should be that specified by the current locale.
|
|
|
|
The synonym Strtod() may be used instead.
|
|
|
|
NV my_strtod(const char * const s, char ** e)
|
|
|
|
=for hackers
|
|
Found in file numeric.c
|
|
|
|
=item PERL_ABS
|
|
X<PERL_ABS>
|
|
|
|
Typeless C<abs> or C<fabs>, I<etc>. (The usage below indicates it is for
|
|
integers, but it works for any type.) Use instead of these, since the C
|
|
library ones force their argument to be what it is expecting, potentially
|
|
leading to disaster. But also beware that this evaluates its argument twice,
|
|
so no C<x++>.
|
|
|
|
int PERL_ABS(int)
|
|
|
|
=for hackers
|
|
Found in file perl.h
|
|
|
|
=item PERL_INT_MAX
|
|
X<PERL_INT_MAX>
|
|
|
|
This and
|
|
C<PERL_INT_MIN>,
|
|
C<PERL_LONG_MAX>,
|
|
C<PERL_LONG_MIN>,
|
|
C<PERL_QUAD_MAX>,
|
|
C<PERL_SHORT_MAX>,
|
|
C<PERL_SHORT_MIN>,
|
|
C<PERL_UCHAR_MAX>,
|
|
C<PERL_UCHAR_MIN>,
|
|
C<PERL_UINT_MAX>,
|
|
C<PERL_ULONG_MAX>,
|
|
C<PERL_ULONG_MIN>,
|
|
C<PERL_UQUAD_MAX>,
|
|
C<PERL_UQUAD_MIN>,
|
|
C<PERL_USHORT_MAX>,
|
|
C<PERL_USHORT_MIN>,
|
|
C<PERL_QUAD_MIN>
|
|
give the largest and smallest number representable in the current
|
|
platform in variables of the corresponding types.
|
|
|
|
For signed types, the smallest representable number is the most negative
|
|
number, the one furthest away from zero.
|
|
|
|
For C99 and later compilers, these correspond to things like C<INT_MAX>, which
|
|
are available to the C code. But these constants, furnished by Perl,
|
|
allow code compiled on earlier compilers to portably have access to the same
|
|
constants.
|
|
|
|
=for hackers
|
|
Found in file perl.h
|
|
|
|
=item Perl_signbit
|
|
X<Perl_signbit>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Return a non-zero integer if the sign bit on an NV is set, and 0 if
|
|
it is not.
|
|
|
|
If F<Configure> detects this system has a C<signbit()> that will work with
|
|
our NVs, then we just use it via the C<#define> in F<perl.h>. Otherwise,
|
|
fall back on this implementation. The main use of this function
|
|
is catching C<-0.0>.
|
|
|
|
C<Configure> notes: This function is called C<'Perl_signbit'> instead of a
|
|
plain C<'signbit'> because it is easy to imagine a system having a C<signbit()>
|
|
function or macro that doesn't happen to work with our particular choice
|
|
of NVs. We shouldn't just re-C<#define> C<signbit> as C<Perl_signbit> and expect
|
|
the standard system headers to be happy. Also, this is a no-context
|
|
function (no C<pTHX_>) because C<Perl_signbit()> is usually re-C<#defined> in
|
|
F<perl.h> as a simple macro call to the system's C<signbit()>.
|
|
Users should just always call C<Perl_signbit()>.
|
|
|
|
int Perl_signbit(NV f)
|
|
|
|
=for hackers
|
|
Found in file numeric.c
|
|
|
|
=item scan_bin
|
|
X<scan_bin>
|
|
|
|
For backwards compatibility. Use C<grok_bin> instead.
|
|
|
|
NV scan_bin(const char* start, STRLEN len,
|
|
STRLEN* retlen)
|
|
|
|
=for hackers
|
|
Found in file numeric.c
|
|
|
|
=item scan_hex
|
|
X<scan_hex>
|
|
|
|
For backwards compatibility. Use C<grok_hex> instead.
|
|
|
|
NV scan_hex(const char* start, STRLEN len,
|
|
STRLEN* retlen)
|
|
|
|
=for hackers
|
|
Found in file numeric.c
|
|
|
|
=item scan_oct
|
|
X<scan_oct>
|
|
|
|
For backwards compatibility. Use C<grok_oct> instead.
|
|
|
|
NV scan_oct(const char* start, STRLEN len,
|
|
STRLEN* retlen)
|
|
|
|
=for hackers
|
|
Found in file numeric.c
|
|
|
|
=item Strtod
|
|
X<Strtod>
|
|
|
|
This is a synonym for L</my_strtod>.
|
|
|
|
NV Strtod(NN const char * const s,
|
|
NULLOK char ** e)
|
|
|
|
=for hackers
|
|
Found in file perl.h
|
|
|
|
=item Strtol
|
|
X<Strtol>
|
|
|
|
Platform and configuration independent C<strtol>. This expands to the
|
|
appropriate C<strotol>-like function based on the platform and F<Configure>
|
|
options>. For example it could expand to C<strtoll> or C<strtoq> instead of
|
|
C<strtol>.
|
|
|
|
NV Strtol(NN const char * const s,
|
|
NULLOK char ** e, int base)
|
|
|
|
=for hackers
|
|
Found in file perl.h
|
|
|
|
=item Strtoul
|
|
X<Strtoul>
|
|
|
|
Platform and configuration independent C<strtoul>. This expands to the
|
|
appropriate C<strotoul>-like function based on the platform and F<Configure>
|
|
options>. For example it could expand to C<strtoull> or C<strtouq> instead of
|
|
C<strtoul>.
|
|
|
|
NV Strtoul(NN const char * const s,
|
|
NULLOK char ** e, int base)
|
|
|
|
=for hackers
|
|
Found in file perl.h
|
|
|
|
|
|
=back
|
|
|
|
=head1 Obsolete backwards compatibility functions
|
|
|
|
Some of these are also deprecated. You can exclude these from
|
|
your compiled Perl by adding this option to Configure:
|
|
C<-Accflags='-DNO_MATHOMS'>
|
|
|
|
|
|
=over 8
|
|
|
|
=item custom_op_desc
|
|
X<custom_op_desc>
|
|
|
|
|
|
DEPRECATED! It is planned to remove this function from a
|
|
future release of Perl. Do not use it for new code; remove it from
|
|
existing code.
|
|
|
|
|
|
Return the description of a given custom op. This was once used by the
|
|
C<OP_DESC> macro, but is no longer: it has only been kept for
|
|
compatibility, and should not be used.
|
|
|
|
const char * custom_op_desc(const OP *o)
|
|
|
|
=for hackers
|
|
Found in file mathoms.c
|
|
|
|
=item custom_op_name
|
|
X<custom_op_name>
|
|
|
|
|
|
DEPRECATED! It is planned to remove this function from a
|
|
future release of Perl. Do not use it for new code; remove it from
|
|
existing code.
|
|
|
|
|
|
Return the name for a given custom op. This was once used by the C<OP_NAME>
|
|
macro, but is no longer: it has only been kept for compatibility, and
|
|
should not be used.
|
|
|
|
const char * custom_op_name(const OP *o)
|
|
|
|
=for hackers
|
|
Found in file mathoms.c
|
|
|
|
=item gv_fetchmethod
|
|
X<gv_fetchmethod>
|
|
|
|
See L</gv_fetchmethod_autoload>.
|
|
|
|
GV* gv_fetchmethod(HV* stash, const char* name)
|
|
|
|
=for hackers
|
|
Found in file mathoms.c
|
|
|
|
=item is_utf8_char
|
|
X<is_utf8_char>
|
|
|
|
|
|
DEPRECATED! It is planned to remove this function from a
|
|
future release of Perl. Do not use it for new code; remove it from
|
|
existing code.
|
|
|
|
|
|
Tests if some arbitrary number of bytes begins in a valid UTF-8
|
|
character. Note that an INVARIANT (i.e. ASCII on non-EBCDIC machines)
|
|
character is a valid UTF-8 character. The actual number of bytes in the UTF-8
|
|
character will be returned if it is valid, otherwise 0.
|
|
|
|
This function is deprecated due to the possibility that malformed input could
|
|
cause reading beyond the end of the input buffer. Use L</isUTF8_CHAR>
|
|
instead.
|
|
|
|
STRLEN is_utf8_char(const U8 *s)
|
|
|
|
=for hackers
|
|
Found in file mathoms.c
|
|
|
|
=item is_utf8_char_buf
|
|
X<is_utf8_char_buf>
|
|
|
|
This is identical to the macro L<perlapi/isUTF8_CHAR>.
|
|
|
|
STRLEN is_utf8_char_buf(const U8 *buf,
|
|
const U8 *buf_end)
|
|
|
|
=for hackers
|
|
Found in file mathoms.c
|
|
|
|
=item pack_cat
|
|
X<pack_cat>
|
|
|
|
The engine implementing C<pack()> Perl function. Note: parameters
|
|
C<next_in_list> and C<flags> are not used. This call should not be used; use
|
|
C<packlist> instead.
|
|
|
|
void pack_cat(SV *cat, const char *pat,
|
|
const char *patend, SV **beglist,
|
|
SV **endlist, SV ***next_in_list,
|
|
U32 flags)
|
|
|
|
=for hackers
|
|
Found in file mathoms.c
|
|
|
|
=item pad_compname_type
|
|
X<pad_compname_type>
|
|
|
|
Looks up the type of the lexical variable at position C<po> in the
|
|
currently-compiling pad. If the variable is typed, the stash of the
|
|
class to which it is typed is returned. If not, C<NULL> is returned.
|
|
|
|
HV* pad_compname_type(const PADOFFSET po)
|
|
|
|
=for hackers
|
|
Found in file mathoms.c
|
|
|
|
=item sv_2pvbyte_nolen
|
|
X<sv_2pvbyte_nolen>
|
|
|
|
Return a pointer to the byte-encoded representation of the SV.
|
|
May cause the SV to be downgraded from UTF-8 as a side-effect.
|
|
|
|
Usually accessed via the C<SvPVbyte_nolen> macro.
|
|
|
|
char* sv_2pvbyte_nolen(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file mathoms.c
|
|
|
|
=item sv_2pvutf8_nolen
|
|
X<sv_2pvutf8_nolen>
|
|
|
|
Return a pointer to the UTF-8-encoded representation of the SV.
|
|
May cause the SV to be upgraded to UTF-8 as a side-effect.
|
|
|
|
Usually accessed via the C<SvPVutf8_nolen> macro.
|
|
|
|
char* sv_2pvutf8_nolen(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file mathoms.c
|
|
|
|
=item sv_2pv_nolen
|
|
X<sv_2pv_nolen>
|
|
|
|
Like C<sv_2pv()>, but doesn't return the length too. You should usually
|
|
use the macro wrapper C<SvPV_nolen(sv)> instead.
|
|
|
|
char* sv_2pv_nolen(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file mathoms.c
|
|
|
|
=item sv_catpvn_mg
|
|
X<sv_catpvn_mg>
|
|
|
|
Like C<sv_catpvn>, but also handles 'set' magic.
|
|
|
|
void sv_catpvn_mg(SV *sv, const char *ptr,
|
|
STRLEN len)
|
|
|
|
=for hackers
|
|
Found in file mathoms.c
|
|
|
|
=item sv_catsv_mg
|
|
X<sv_catsv_mg>
|
|
|
|
Like C<sv_catsv>, but also handles 'set' magic.
|
|
|
|
void sv_catsv_mg(SV *dsv, SV *ssv)
|
|
|
|
=for hackers
|
|
Found in file mathoms.c
|
|
|
|
=item sv_force_normal
|
|
X<sv_force_normal>
|
|
|
|
Undo various types of fakery on an SV: if the PV is a shared string, make
|
|
a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
|
|
an C<xpvmg>. See also C<L</sv_force_normal_flags>>.
|
|
|
|
void sv_force_normal(SV *sv)
|
|
|
|
=for hackers
|
|
Found in file mathoms.c
|
|
|
|
=item sv_iv
|
|
X<sv_iv>
|
|
|
|
|
|
DEPRECATED! It is planned to remove this function from a
|
|
future release of Perl. Do not use it for new code; remove it from
|
|
existing code.
|
|
|
|
|
|
A private implementation of the C<SvIVx> macro for compilers which can't
|
|
cope with complex macro expressions. Always use the macro instead.
|
|
|
|
IV sv_iv(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file mathoms.c
|
|
|
|
=item sv_nolocking
|
|
X<sv_nolocking>
|
|
|
|
|
|
DEPRECATED! It is planned to remove this function from a
|
|
future release of Perl. Do not use it for new code; remove it from
|
|
existing code.
|
|
|
|
|
|
Dummy routine which "locks" an SV when there is no locking module present.
|
|
Exists to avoid test for a C<NULL> function pointer and because it could
|
|
potentially warn under some level of strict-ness.
|
|
|
|
"Superseded" by C<sv_nosharing()>.
|
|
|
|
void sv_nolocking(SV *sv)
|
|
|
|
=for hackers
|
|
Found in file mathoms.c
|
|
|
|
=item sv_nounlocking
|
|
X<sv_nounlocking>
|
|
|
|
|
|
DEPRECATED! It is planned to remove this function from a
|
|
future release of Perl. Do not use it for new code; remove it from
|
|
existing code.
|
|
|
|
|
|
Dummy routine which "unlocks" an SV when there is no locking module present.
|
|
Exists to avoid test for a C<NULL> function pointer and because it could
|
|
potentially warn under some level of strict-ness.
|
|
|
|
"Superseded" by C<sv_nosharing()>.
|
|
|
|
void sv_nounlocking(SV *sv)
|
|
|
|
=for hackers
|
|
Found in file mathoms.c
|
|
|
|
=item sv_nv
|
|
X<sv_nv>
|
|
|
|
|
|
DEPRECATED! It is planned to remove this function from a
|
|
future release of Perl. Do not use it for new code; remove it from
|
|
existing code.
|
|
|
|
|
|
A private implementation of the C<SvNVx> macro for compilers which can't
|
|
cope with complex macro expressions. Always use the macro instead.
|
|
|
|
NV sv_nv(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file mathoms.c
|
|
|
|
=item sv_pv
|
|
X<sv_pv>
|
|
|
|
Use the C<SvPV_nolen> macro instead
|
|
|
|
char* sv_pv(SV *sv)
|
|
|
|
=for hackers
|
|
Found in file mathoms.c
|
|
|
|
=item sv_pvbyte
|
|
X<sv_pvbyte>
|
|
|
|
Use C<SvPVbyte_nolen> instead.
|
|
|
|
char* sv_pvbyte(SV *sv)
|
|
|
|
=for hackers
|
|
Found in file mathoms.c
|
|
|
|
=item sv_pvbyten
|
|
X<sv_pvbyten>
|
|
|
|
|
|
DEPRECATED! It is planned to remove this function from a
|
|
future release of Perl. Do not use it for new code; remove it from
|
|
existing code.
|
|
|
|
|
|
A private implementation of the C<SvPVbyte> macro for compilers
|
|
which can't cope with complex macro expressions. Always use the macro
|
|
instead.
|
|
|
|
char* sv_pvbyten(SV *sv, STRLEN *lp)
|
|
|
|
=for hackers
|
|
Found in file mathoms.c
|
|
|
|
=item sv_pvn
|
|
X<sv_pvn>
|
|
|
|
|
|
DEPRECATED! It is planned to remove this function from a
|
|
future release of Perl. Do not use it for new code; remove it from
|
|
existing code.
|
|
|
|
|
|
A private implementation of the C<SvPV> macro for compilers which can't
|
|
cope with complex macro expressions. Always use the macro instead.
|
|
|
|
char* sv_pvn(SV *sv, STRLEN *lp)
|
|
|
|
=for hackers
|
|
Found in file mathoms.c
|
|
|
|
=item sv_pvutf8
|
|
X<sv_pvutf8>
|
|
|
|
Use the C<SvPVutf8_nolen> macro instead
|
|
|
|
char* sv_pvutf8(SV *sv)
|
|
|
|
=for hackers
|
|
Found in file mathoms.c
|
|
|
|
=item sv_pvutf8n
|
|
X<sv_pvutf8n>
|
|
|
|
|
|
DEPRECATED! It is planned to remove this function from a
|
|
future release of Perl. Do not use it for new code; remove it from
|
|
existing code.
|
|
|
|
|
|
A private implementation of the C<SvPVutf8> macro for compilers
|
|
which can't cope with complex macro expressions. Always use the macro
|
|
instead.
|
|
|
|
char* sv_pvutf8n(SV *sv, STRLEN *lp)
|
|
|
|
=for hackers
|
|
Found in file mathoms.c
|
|
|
|
=item sv_taint
|
|
X<sv_taint>
|
|
|
|
Taint an SV. Use C<SvTAINTED_on> instead.
|
|
|
|
void sv_taint(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file mathoms.c
|
|
|
|
=item sv_unref
|
|
X<sv_unref>
|
|
|
|
Unsets the RV status of the SV, and decrements the reference count of
|
|
whatever was being referenced by the RV. This can almost be thought of
|
|
as a reversal of C<newSVrv>. This is C<sv_unref_flags> with the C<flag>
|
|
being zero. See C<L</SvROK_off>>.
|
|
|
|
void sv_unref(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file mathoms.c
|
|
|
|
=item sv_usepvn
|
|
X<sv_usepvn>
|
|
|
|
Tells an SV to use C<ptr> to find its string value. Implemented by
|
|
calling C<sv_usepvn_flags> with C<flags> of 0, hence does not handle 'set'
|
|
magic. See C<L</sv_usepvn_flags>>.
|
|
|
|
void sv_usepvn(SV* sv, char* ptr, STRLEN len)
|
|
|
|
=for hackers
|
|
Found in file mathoms.c
|
|
|
|
=item sv_usepvn_mg
|
|
X<sv_usepvn_mg>
|
|
|
|
Like C<sv_usepvn>, but also handles 'set' magic.
|
|
|
|
void sv_usepvn_mg(SV *sv, char *ptr, STRLEN len)
|
|
|
|
=for hackers
|
|
Found in file mathoms.c
|
|
|
|
=item sv_uv
|
|
X<sv_uv>
|
|
|
|
|
|
DEPRECATED! It is planned to remove this function from a
|
|
future release of Perl. Do not use it for new code; remove it from
|
|
existing code.
|
|
|
|
|
|
A private implementation of the C<SvUVx> macro for compilers which can't
|
|
cope with complex macro expressions. Always use the macro instead.
|
|
|
|
UV sv_uv(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file mathoms.c
|
|
|
|
=item unpack_str
|
|
X<unpack_str>
|
|
|
|
|
|
DEPRECATED! It is planned to remove this function from a
|
|
future release of Perl. Do not use it for new code; remove it from
|
|
existing code.
|
|
|
|
|
|
The engine implementing C<unpack()> Perl function. Note: parameters C<strbeg>,
|
|
C<new_s> and C<ocnt> are not used. This call should not be used, use
|
|
C<unpackstring> instead.
|
|
|
|
SSize_t unpack_str(const char *pat, const char *patend,
|
|
const char *s, const char *strbeg,
|
|
const char *strend, char **new_s,
|
|
I32 ocnt, U32 flags)
|
|
|
|
=for hackers
|
|
Found in file mathoms.c
|
|
|
|
=item utf8_to_uvchr
|
|
X<utf8_to_uvchr>
|
|
|
|
|
|
DEPRECATED! It is planned to remove this function from a
|
|
future release of Perl. Do not use it for new code; remove it from
|
|
existing code.
|
|
|
|
|
|
Returns the native code point of the first character in the string C<s>
|
|
which is assumed to be in UTF-8 encoding; C<retlen> will be set to the
|
|
length, in bytes, of that character.
|
|
|
|
Some, but not all, UTF-8 malformations are detected, and in fact, some
|
|
malformed input could cause reading beyond the end of the input buffer, which
|
|
is why this function is deprecated. Use L</utf8_to_uvchr_buf> instead.
|
|
|
|
If C<s> points to one of the detected malformations, and UTF8 warnings are
|
|
enabled, zero is returned and C<*retlen> is set (if C<retlen> isn't
|
|
C<NULL>) to -1. If those warnings are off, the computed value if well-defined (or
|
|
the Unicode REPLACEMENT CHARACTER, if not) is silently returned, and C<*retlen>
|
|
is set (if C<retlen> isn't NULL) so that (S<C<s> + C<*retlen>>) is the
|
|
next possible position in C<s> that could begin a non-malformed character.
|
|
See L</utf8n_to_uvchr> for details on when the REPLACEMENT CHARACTER is returned.
|
|
|
|
UV utf8_to_uvchr(const U8 *s, STRLEN *retlen)
|
|
|
|
=for hackers
|
|
Found in file mathoms.c
|
|
|
|
|
|
=back
|
|
|
|
=head1 Optree construction
|
|
|
|
=over 8
|
|
|
|
=item newASSIGNOP
|
|
X<newASSIGNOP>
|
|
|
|
Constructs, checks, and returns an assignment op. C<left> and C<right>
|
|
supply the parameters of the assignment; they are consumed by this
|
|
function and become part of the constructed op tree.
|
|
|
|
If C<optype> is C<OP_ANDASSIGN>, C<OP_ORASSIGN>, or C<OP_DORASSIGN>, then
|
|
a suitable conditional optree is constructed. If C<optype> is the opcode
|
|
of a binary operator, such as C<OP_BIT_OR>, then an op is constructed that
|
|
performs the binary operation and assigns the result to the left argument.
|
|
Either way, if C<optype> is non-zero then C<flags> has no effect.
|
|
|
|
If C<optype> is zero, then a plain scalar or list assignment is
|
|
constructed. Which type of assignment it is is automatically determined.
|
|
C<flags> gives the eight bits of C<op_flags>, except that C<OPf_KIDS>
|
|
will be set automatically, and, shifted up eight bits, the eight bits
|
|
of C<op_private>, except that the bit with value 1 or 2 is automatically
|
|
set as required.
|
|
|
|
OP* newASSIGNOP(I32 flags, OP* left, I32 optype,
|
|
OP* right)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item newBINOP
|
|
X<newBINOP>
|
|
|
|
Constructs, checks, and returns an op of any binary type. C<type>
|
|
is the opcode. C<flags> gives the eight bits of C<op_flags>, except
|
|
that C<OPf_KIDS> will be set automatically, and, shifted up eight bits,
|
|
the eight bits of C<op_private>, except that the bit with value 1 or
|
|
2 is automatically set as required. C<first> and C<last> supply up to
|
|
two ops to be the direct children of the binary op; they are consumed
|
|
by this function and become part of the constructed op tree.
|
|
|
|
OP* newBINOP(I32 type, I32 flags, OP* first,
|
|
OP* last)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item newCONDOP
|
|
X<newCONDOP>
|
|
|
|
Constructs, checks, and returns a conditional-expression (C<cond_expr>)
|
|
op. C<flags> gives the eight bits of C<op_flags>, except that C<OPf_KIDS>
|
|
will be set automatically, and, shifted up eight bits, the eight bits of
|
|
C<op_private>, except that the bit with value 1 is automatically set.
|
|
C<first> supplies the expression selecting between the two branches,
|
|
and C<trueop> and C<falseop> supply the branches; they are consumed by
|
|
this function and become part of the constructed op tree.
|
|
|
|
OP* newCONDOP(I32 flags, OP* first, OP* trueop,
|
|
OP* falseop)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item newDEFSVOP
|
|
X<newDEFSVOP>
|
|
|
|
Constructs and returns an op to access C<$_>.
|
|
|
|
OP* newDEFSVOP()
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item newFOROP
|
|
X<newFOROP>
|
|
|
|
Constructs, checks, and returns an op tree expressing a C<foreach>
|
|
loop (iteration through a list of values). This is a heavyweight loop,
|
|
with structure that allows exiting the loop by C<last> and suchlike.
|
|
|
|
C<sv> optionally supplies the variable that will be aliased to each
|
|
item in turn; if null, it defaults to C<$_>.
|
|
C<expr> supplies the list of values to iterate over. C<block> supplies
|
|
the main body of the loop, and C<cont> optionally supplies a C<continue>
|
|
block that operates as a second half of the body. All of these optree
|
|
inputs are consumed by this function and become part of the constructed
|
|
op tree.
|
|
|
|
C<flags> gives the eight bits of C<op_flags> for the C<leaveloop>
|
|
op and, shifted up eight bits, the eight bits of C<op_private> for
|
|
the C<leaveloop> op, except that (in both cases) some bits will be set
|
|
automatically.
|
|
|
|
OP* newFOROP(I32 flags, OP* sv, OP* expr, OP* block,
|
|
OP* cont)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item newGIVENOP
|
|
X<newGIVENOP>
|
|
|
|
Constructs, checks, and returns an op tree expressing a C<given> block.
|
|
C<cond> supplies the expression to whose value C<$_> will be locally
|
|
aliased, and C<block> supplies the body of the C<given> construct; they
|
|
are consumed by this function and become part of the constructed op tree.
|
|
C<defsv_off> must be zero (it used to identity the pad slot of lexical $_).
|
|
|
|
OP* newGIVENOP(OP* cond, OP* block,
|
|
PADOFFSET defsv_off)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item newGVOP
|
|
X<newGVOP>
|
|
|
|
Constructs, checks, and returns an op of any type that involves an
|
|
embedded reference to a GV. C<type> is the opcode. C<flags> gives the
|
|
eight bits of C<op_flags>. C<gv> identifies the GV that the op should
|
|
reference; calling this function does not transfer ownership of any
|
|
reference to it.
|
|
|
|
OP* newGVOP(I32 type, I32 flags, GV* gv)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item newLISTOP
|
|
X<newLISTOP>
|
|
|
|
Constructs, checks, and returns an op of any list type. C<type> is
|
|
the opcode. C<flags> gives the eight bits of C<op_flags>, except that
|
|
C<OPf_KIDS> will be set automatically if required. C<first> and C<last>
|
|
supply up to two ops to be direct children of the list op; they are
|
|
consumed by this function and become part of the constructed op tree.
|
|
|
|
For most list operators, the check function expects all the kid ops to be
|
|
present already, so calling C<newLISTOP(OP_JOIN, ...)> (e.g.) is not
|
|
appropriate. What you want to do in that case is create an op of type
|
|
C<OP_LIST>, append more children to it, and then call L</op_convert_list>.
|
|
See L</op_convert_list> for more information.
|
|
|
|
|
|
OP* newLISTOP(I32 type, I32 flags, OP* first,
|
|
OP* last)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item newLOGOP
|
|
X<newLOGOP>
|
|
|
|
Constructs, checks, and returns a logical (flow control) op. C<type>
|
|
is the opcode. C<flags> gives the eight bits of C<op_flags>, except
|
|
that C<OPf_KIDS> will be set automatically, and, shifted up eight bits,
|
|
the eight bits of C<op_private>, except that the bit with value 1 is
|
|
automatically set. C<first> supplies the expression controlling the
|
|
flow, and C<other> supplies the side (alternate) chain of ops; they are
|
|
consumed by this function and become part of the constructed op tree.
|
|
|
|
OP* newLOGOP(I32 optype, I32 flags, OP *first,
|
|
OP *other)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item newLOOPEX
|
|
X<newLOOPEX>
|
|
|
|
Constructs, checks, and returns a loop-exiting op (such as C<goto>
|
|
or C<last>). C<type> is the opcode. C<label> supplies the parameter
|
|
determining the target of the op; it is consumed by this function and
|
|
becomes part of the constructed op tree.
|
|
|
|
OP* newLOOPEX(I32 type, OP* label)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item newLOOPOP
|
|
X<newLOOPOP>
|
|
|
|
Constructs, checks, and returns an op tree expressing a loop. This is
|
|
only a loop in the control flow through the op tree; it does not have
|
|
the heavyweight loop structure that allows exiting the loop by C<last>
|
|
and suchlike. C<flags> gives the eight bits of C<op_flags> for the
|
|
top-level op, except that some bits will be set automatically as required.
|
|
C<expr> supplies the expression controlling loop iteration, and C<block>
|
|
supplies the body of the loop; they are consumed by this function and
|
|
become part of the constructed op tree. C<debuggable> is currently
|
|
unused and should always be 1.
|
|
|
|
OP* newLOOPOP(I32 flags, I32 debuggable, OP* expr,
|
|
OP* block)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item newMETHOP
|
|
X<newMETHOP>
|
|
|
|
Constructs, checks, and returns an op of method type with a method name
|
|
evaluated at runtime. C<type> is the opcode. C<flags> gives the eight
|
|
bits of C<op_flags>, except that C<OPf_KIDS> will be set automatically,
|
|
and, shifted up eight bits, the eight bits of C<op_private>, except that
|
|
the bit with value 1 is automatically set. C<dynamic_meth> supplies an
|
|
op which evaluates method name; it is consumed by this function and
|
|
become part of the constructed op tree.
|
|
Supported optypes: C<OP_METHOD>.
|
|
|
|
OP* newMETHOP(I32 type, I32 flags, OP* dynamic_meth)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item newMETHOP_named
|
|
X<newMETHOP_named>
|
|
|
|
Constructs, checks, and returns an op of method type with a constant
|
|
method name. C<type> is the opcode. C<flags> gives the eight bits of
|
|
C<op_flags>, and, shifted up eight bits, the eight bits of
|
|
C<op_private>. C<const_meth> supplies a constant method name;
|
|
it must be a shared COW string.
|
|
Supported optypes: C<OP_METHOD_NAMED>.
|
|
|
|
OP* newMETHOP_named(I32 type, I32 flags,
|
|
SV* const_meth)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item newNULLLIST
|
|
X<newNULLLIST>
|
|
|
|
Constructs, checks, and returns a new C<stub> op, which represents an
|
|
empty list expression.
|
|
|
|
OP* newNULLLIST()
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item newOP
|
|
X<newOP>
|
|
|
|
Constructs, checks, and returns an op of any base type (any type that
|
|
has no extra fields). C<type> is the opcode. C<flags> gives the
|
|
eight bits of C<op_flags>, and, shifted up eight bits, the eight bits
|
|
of C<op_private>.
|
|
|
|
OP* newOP(I32 optype, I32 flags)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item newPADOP
|
|
X<newPADOP>
|
|
|
|
Constructs, checks, and returns an op of any type that involves a
|
|
reference to a pad element. C<type> is the opcode. C<flags> gives the
|
|
eight bits of C<op_flags>. A pad slot is automatically allocated, and
|
|
is populated with C<sv>; this function takes ownership of one reference
|
|
to it.
|
|
|
|
This function only exists if Perl has been compiled to use ithreads.
|
|
|
|
OP* newPADOP(I32 type, I32 flags, SV* sv)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item newPMOP
|
|
X<newPMOP>
|
|
|
|
Constructs, checks, and returns an op of any pattern matching type.
|
|
C<type> is the opcode. C<flags> gives the eight bits of C<op_flags>
|
|
and, shifted up eight bits, the eight bits of C<op_private>.
|
|
|
|
OP* newPMOP(I32 type, I32 flags)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item newPVOP
|
|
X<newPVOP>
|
|
|
|
Constructs, checks, and returns an op of any type that involves an
|
|
embedded C-level pointer (PV). C<type> is the opcode. C<flags> gives
|
|
the eight bits of C<op_flags>. C<pv> supplies the C-level pointer.
|
|
Depending on the op type, the memory referenced by C<pv> may be freed
|
|
when the op is destroyed. If the op is of a freeing type, C<pv> must
|
|
have been allocated using C<PerlMemShared_malloc>.
|
|
|
|
OP* newPVOP(I32 type, I32 flags, char* pv)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item newRANGE
|
|
X<newRANGE>
|
|
|
|
Constructs and returns a C<range> op, with subordinate C<flip> and
|
|
C<flop> ops. C<flags> gives the eight bits of C<op_flags> for the
|
|
C<flip> op and, shifted up eight bits, the eight bits of C<op_private>
|
|
for both the C<flip> and C<range> ops, except that the bit with value
|
|
1 is automatically set. C<left> and C<right> supply the expressions
|
|
controlling the endpoints of the range; they are consumed by this function
|
|
and become part of the constructed op tree.
|
|
|
|
OP* newRANGE(I32 flags, OP* left, OP* right)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item newSLICEOP
|
|
X<newSLICEOP>
|
|
|
|
Constructs, checks, and returns an C<lslice> (list slice) op. C<flags>
|
|
gives the eight bits of C<op_flags>, except that C<OPf_KIDS> will
|
|
be set automatically, and, shifted up eight bits, the eight bits of
|
|
C<op_private>, except that the bit with value 1 or 2 is automatically
|
|
set as required. C<listval> and C<subscript> supply the parameters of
|
|
the slice; they are consumed by this function and become part of the
|
|
constructed op tree.
|
|
|
|
OP* newSLICEOP(I32 flags, OP* subscript, OP* listop)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item newSTATEOP
|
|
X<newSTATEOP>
|
|
|
|
Constructs a state op (COP). The state op is normally a C<nextstate> op,
|
|
but will be a C<dbstate> op if debugging is enabled for currently-compiled
|
|
code. The state op is populated from C<PL_curcop> (or C<PL_compiling>).
|
|
If C<label> is non-null, it supplies the name of a label to attach to
|
|
the state op; this function takes ownership of the memory pointed at by
|
|
C<label>, and will free it. C<flags> gives the eight bits of C<op_flags>
|
|
for the state op.
|
|
|
|
If C<o> is null, the state op is returned. Otherwise the state op is
|
|
combined with C<o> into a C<lineseq> list op, which is returned. C<o>
|
|
is consumed by this function and becomes part of the returned op tree.
|
|
|
|
OP* newSTATEOP(I32 flags, char* label, OP* o)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item newSVOP
|
|
X<newSVOP>
|
|
|
|
Constructs, checks, and returns an op of any type that involves an
|
|
embedded SV. C<type> is the opcode. C<flags> gives the eight bits
|
|
of C<op_flags>. C<sv> gives the SV to embed in the op; this function
|
|
takes ownership of one reference to it.
|
|
|
|
OP* newSVOP(I32 type, I32 flags, SV* sv)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item newUNOP
|
|
X<newUNOP>
|
|
|
|
Constructs, checks, and returns an op of any unary type. C<type> is
|
|
the opcode. C<flags> gives the eight bits of C<op_flags>, except that
|
|
C<OPf_KIDS> will be set automatically if required, and, shifted up eight
|
|
bits, the eight bits of C<op_private>, except that the bit with value 1
|
|
is automatically set. C<first> supplies an optional op to be the direct
|
|
child of the unary op; it is consumed by this function and become part
|
|
of the constructed op tree.
|
|
|
|
OP* newUNOP(I32 type, I32 flags, OP* first)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item newUNOP_AUX
|
|
X<newUNOP_AUX>
|
|
|
|
Similar to C<newUNOP>, but creates an C<UNOP_AUX> struct instead, with C<op_aux>
|
|
initialised to C<aux>
|
|
|
|
OP* newUNOP_AUX(I32 type, I32 flags, OP* first,
|
|
UNOP_AUX_item *aux)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item newWHENOP
|
|
X<newWHENOP>
|
|
|
|
Constructs, checks, and returns an op tree expressing a C<when> block.
|
|
C<cond> supplies the test expression, and C<block> supplies the block
|
|
that will be executed if the test evaluates to true; they are consumed
|
|
by this function and become part of the constructed op tree. C<cond>
|
|
will be interpreted DWIMically, often as a comparison against C<$_>,
|
|
and may be null to generate a C<default> block.
|
|
|
|
OP* newWHENOP(OP* cond, OP* block)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item newWHILEOP
|
|
X<newWHILEOP>
|
|
|
|
Constructs, checks, and returns an op tree expressing a C<while> loop.
|
|
This is a heavyweight loop, with structure that allows exiting the loop
|
|
by C<last> and suchlike.
|
|
|
|
C<loop> is an optional preconstructed C<enterloop> op to use in the
|
|
loop; if it is null then a suitable op will be constructed automatically.
|
|
C<expr> supplies the loop's controlling expression. C<block> supplies the
|
|
main body of the loop, and C<cont> optionally supplies a C<continue> block
|
|
that operates as a second half of the body. All of these optree inputs
|
|
are consumed by this function and become part of the constructed op tree.
|
|
|
|
C<flags> gives the eight bits of C<op_flags> for the C<leaveloop>
|
|
op and, shifted up eight bits, the eight bits of C<op_private> for
|
|
the C<leaveloop> op, except that (in both cases) some bits will be set
|
|
automatically. C<debuggable> is currently unused and should always be 1.
|
|
C<has_my> can be supplied as true to force the
|
|
loop body to be enclosed in its own scope.
|
|
|
|
OP* newWHILEOP(I32 flags, I32 debuggable,
|
|
LOOP* loop, OP* expr, OP* block,
|
|
OP* cont, I32 has_my)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
|
|
=back
|
|
|
|
=head1 Optree Manipulation Functions
|
|
|
|
=over 8
|
|
|
|
=item alloccopstash
|
|
X<alloccopstash>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Available only under threaded builds, this function allocates an entry in
|
|
C<PL_stashpad> for the stash passed to it.
|
|
|
|
PADOFFSET alloccopstash(HV *hv)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item block_end
|
|
X<block_end>
|
|
|
|
Handles compile-time scope exit. C<floor>
|
|
is the savestack index returned by
|
|
C<block_start>, and C<seq> is the body of the block. Returns the block,
|
|
possibly modified.
|
|
|
|
OP* block_end(I32 floor, OP* seq)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item block_start
|
|
X<block_start>
|
|
|
|
Handles compile-time scope entry.
|
|
Arranges for hints to be restored on block
|
|
exit and also handles pad sequence numbers to make lexical variables scope
|
|
right. Returns a savestack index for use with C<block_end>.
|
|
|
|
int block_start(int full)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item ck_entersub_args_list
|
|
X<ck_entersub_args_list>
|
|
|
|
Performs the default fixup of the arguments part of an C<entersub>
|
|
op tree. This consists of applying list context to each of the
|
|
argument ops. This is the standard treatment used on a call marked
|
|
with C<&>, or a method call, or a call through a subroutine reference,
|
|
or any other call where the callee can't be identified at compile time,
|
|
or a call where the callee has no prototype.
|
|
|
|
OP* ck_entersub_args_list(OP *entersubop)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item ck_entersub_args_proto
|
|
X<ck_entersub_args_proto>
|
|
|
|
Performs the fixup of the arguments part of an C<entersub> op tree
|
|
based on a subroutine prototype. This makes various modifications to
|
|
the argument ops, from applying context up to inserting C<refgen> ops,
|
|
and checking the number and syntactic types of arguments, as directed by
|
|
the prototype. This is the standard treatment used on a subroutine call,
|
|
not marked with C<&>, where the callee can be identified at compile time
|
|
and has a prototype.
|
|
|
|
C<protosv> supplies the subroutine prototype to be applied to the call.
|
|
It may be a normal defined scalar, of which the string value will be used.
|
|
Alternatively, for convenience, it may be a subroutine object (a C<CV*>
|
|
that has been cast to C<SV*>) which has a prototype. The prototype
|
|
supplied, in whichever form, does not need to match the actual callee
|
|
referenced by the op tree.
|
|
|
|
If the argument ops disagree with the prototype, for example by having
|
|
an unacceptable number of arguments, a valid op tree is returned anyway.
|
|
The error is reflected in the parser state, normally resulting in a single
|
|
exception at the top level of parsing which covers all the compilation
|
|
errors that occurred. In the error message, the callee is referred to
|
|
by the name defined by the C<namegv> parameter.
|
|
|
|
OP* ck_entersub_args_proto(OP *entersubop,
|
|
GV *namegv, SV *protosv)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item ck_entersub_args_proto_or_list
|
|
X<ck_entersub_args_proto_or_list>
|
|
|
|
Performs the fixup of the arguments part of an C<entersub> op tree either
|
|
based on a subroutine prototype or using default list-context processing.
|
|
This is the standard treatment used on a subroutine call, not marked
|
|
with C<&>, where the callee can be identified at compile time.
|
|
|
|
C<protosv> supplies the subroutine prototype to be applied to the call,
|
|
or indicates that there is no prototype. It may be a normal scalar,
|
|
in which case if it is defined then the string value will be used
|
|
as a prototype, and if it is undefined then there is no prototype.
|
|
Alternatively, for convenience, it may be a subroutine object (a C<CV*>
|
|
that has been cast to C<SV*>), of which the prototype will be used if it
|
|
has one. The prototype (or lack thereof) supplied, in whichever form,
|
|
does not need to match the actual callee referenced by the op tree.
|
|
|
|
If the argument ops disagree with the prototype, for example by having
|
|
an unacceptable number of arguments, a valid op tree is returned anyway.
|
|
The error is reflected in the parser state, normally resulting in a single
|
|
exception at the top level of parsing which covers all the compilation
|
|
errors that occurred. In the error message, the callee is referred to
|
|
by the name defined by the C<namegv> parameter.
|
|
|
|
OP* ck_entersub_args_proto_or_list(OP *entersubop,
|
|
GV *namegv,
|
|
SV *protosv)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item cv_const_sv
|
|
X<cv_const_sv>
|
|
|
|
If C<cv> is a constant sub eligible for inlining, returns the constant
|
|
value returned by the sub. Otherwise, returns C<NULL>.
|
|
|
|
Constant subs can be created with C<newCONSTSUB> or as described in
|
|
L<perlsub/"Constant Functions">.
|
|
|
|
SV* cv_const_sv(const CV *const cv)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item cv_get_call_checker
|
|
X<cv_get_call_checker>
|
|
|
|
The original form of L</cv_get_call_checker_flags>, which does not return
|
|
checker flags. When using a checker function returned by this function,
|
|
it is only safe to call it with a genuine GV as its C<namegv> argument.
|
|
|
|
void cv_get_call_checker(CV *cv,
|
|
Perl_call_checker *ckfun_p,
|
|
SV **ckobj_p)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item cv_get_call_checker_flags
|
|
X<cv_get_call_checker_flags>
|
|
|
|
Retrieves the function that will be used to fix up a call to C<cv>.
|
|
Specifically, the function is applied to an C<entersub> op tree for a
|
|
subroutine call, not marked with C<&>, where the callee can be identified
|
|
at compile time as C<cv>.
|
|
|
|
The C-level function pointer is returned in C<*ckfun_p>, an SV argument
|
|
for it is returned in C<*ckobj_p>, and control flags are returned in
|
|
C<*ckflags_p>. The function is intended to be called in this manner:
|
|
|
|
entersubop = (*ckfun_p)(aTHX_ entersubop, namegv, (*ckobj_p));
|
|
|
|
In this call, C<entersubop> is a pointer to the C<entersub> op,
|
|
which may be replaced by the check function, and C<namegv> supplies
|
|
the name that should be used by the check function to refer
|
|
to the callee of the C<entersub> op if it needs to emit any diagnostics.
|
|
It is permitted to apply the check function in non-standard situations,
|
|
such as to a call to a different subroutine or to a method call.
|
|
|
|
C<namegv> may not actually be a GV. If the C<CALL_CHECKER_REQUIRE_GV>
|
|
bit is clear in C<*ckflags_p>, it is permitted to pass a CV or other SV
|
|
instead, anything that can be used as the first argument to L</cv_name>.
|
|
If the C<CALL_CHECKER_REQUIRE_GV> bit is set in C<*ckflags_p> then the
|
|
check function requires C<namegv> to be a genuine GV.
|
|
|
|
By default, the check function is
|
|
L<Perl_ck_entersub_args_proto_or_list|/ck_entersub_args_proto_or_list>,
|
|
the SV parameter is C<cv> itself, and the C<CALL_CHECKER_REQUIRE_GV>
|
|
flag is clear. This implements standard prototype processing. It can
|
|
be changed, for a particular subroutine, by L</cv_set_call_checker_flags>.
|
|
|
|
If the C<CALL_CHECKER_REQUIRE_GV> bit is set in C<gflags> then it
|
|
indicates that the caller only knows about the genuine GV version of
|
|
C<namegv>, and accordingly the corresponding bit will always be set in
|
|
C<*ckflags_p>, regardless of the check function's recorded requirements.
|
|
If the C<CALL_CHECKER_REQUIRE_GV> bit is clear in C<gflags> then it
|
|
indicates the caller knows about the possibility of passing something
|
|
other than a GV as C<namegv>, and accordingly the corresponding bit may
|
|
be either set or clear in C<*ckflags_p>, indicating the check function's
|
|
recorded requirements.
|
|
|
|
C<gflags> is a bitset passed into C<cv_get_call_checker_flags>, in which
|
|
only the C<CALL_CHECKER_REQUIRE_GV> bit currently has a defined meaning
|
|
(for which see above). All other bits should be clear.
|
|
|
|
void cv_get_call_checker_flags(
|
|
CV *cv, U32 gflags,
|
|
Perl_call_checker *ckfun_p, SV **ckobj_p,
|
|
U32 *ckflags_p
|
|
)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item cv_set_call_checker
|
|
X<cv_set_call_checker>
|
|
|
|
The original form of L</cv_set_call_checker_flags>, which passes it the
|
|
C<CALL_CHECKER_REQUIRE_GV> flag for backward-compatibility. The effect
|
|
of that flag setting is that the check function is guaranteed to get a
|
|
genuine GV as its C<namegv> argument.
|
|
|
|
void cv_set_call_checker(CV *cv,
|
|
Perl_call_checker ckfun,
|
|
SV *ckobj)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item cv_set_call_checker_flags
|
|
X<cv_set_call_checker_flags>
|
|
|
|
Sets the function that will be used to fix up a call to C<cv>.
|
|
Specifically, the function is applied to an C<entersub> op tree for a
|
|
subroutine call, not marked with C<&>, where the callee can be identified
|
|
at compile time as C<cv>.
|
|
|
|
The C-level function pointer is supplied in C<ckfun>, an SV argument for
|
|
it is supplied in C<ckobj>, and control flags are supplied in C<ckflags>.
|
|
The function should be defined like this:
|
|
|
|
STATIC OP * ckfun(pTHX_ OP *op, GV *namegv, SV *ckobj)
|
|
|
|
It is intended to be called in this manner:
|
|
|
|
entersubop = ckfun(aTHX_ entersubop, namegv, ckobj);
|
|
|
|
In this call, C<entersubop> is a pointer to the C<entersub> op,
|
|
which may be replaced by the check function, and C<namegv> supplies
|
|
the name that should be used by the check function to refer
|
|
to the callee of the C<entersub> op if it needs to emit any diagnostics.
|
|
It is permitted to apply the check function in non-standard situations,
|
|
such as to a call to a different subroutine or to a method call.
|
|
|
|
C<namegv> may not actually be a GV. For efficiency, perl may pass a
|
|
CV or other SV instead. Whatever is passed can be used as the first
|
|
argument to L</cv_name>. You can force perl to pass a GV by including
|
|
C<CALL_CHECKER_REQUIRE_GV> in the C<ckflags>.
|
|
|
|
C<ckflags> is a bitset, in which only the C<CALL_CHECKER_REQUIRE_GV>
|
|
bit currently has a defined meaning (for which see above). All other
|
|
bits should be clear.
|
|
|
|
The current setting for a particular CV can be retrieved by
|
|
L</cv_get_call_checker_flags>.
|
|
|
|
void cv_set_call_checker_flags(
|
|
CV *cv, Perl_call_checker ckfun, SV *ckobj,
|
|
U32 ckflags
|
|
)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item LINKLIST
|
|
X<LINKLIST>
|
|
|
|
Given the root of an optree, link the tree in execution order using the
|
|
C<op_next> pointers and return the first op executed. If this has
|
|
already been done, it will not be redone, and C<< o->op_next >> will be
|
|
returned. If C<< o->op_next >> is not already set, C<o> should be at
|
|
least an C<UNOP>.
|
|
|
|
OP* LINKLIST(OP *o)
|
|
|
|
=for hackers
|
|
Found in file op.h
|
|
|
|
=item newCONSTSUB
|
|
X<newCONSTSUB>
|
|
|
|
Behaves like L</newCONSTSUB_flags>, except that C<name> is nul-terminated
|
|
rather than of counted length, and no flags are set. (This means that
|
|
C<name> is always interpreted as Latin-1.)
|
|
|
|
CV* newCONSTSUB(HV* stash, const char* name, SV* sv)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item newCONSTSUB_flags
|
|
X<newCONSTSUB_flags>
|
|
|
|
Construct a constant subroutine, also performing some surrounding
|
|
jobs. A scalar constant-valued subroutine is eligible for inlining
|
|
at compile-time, and in Perl code can be created by S<C<sub FOO () {
|
|
123 }>>. Other kinds of constant subroutine have other treatment.
|
|
|
|
The subroutine will have an empty prototype and will ignore any arguments
|
|
when called. Its constant behaviour is determined by C<sv>. If C<sv>
|
|
is null, the subroutine will yield an empty list. If C<sv> points to a
|
|
scalar, the subroutine will always yield that scalar. If C<sv> points
|
|
to an array, the subroutine will always yield a list of the elements of
|
|
that array in list context, or the number of elements in the array in
|
|
scalar context. This function takes ownership of one counted reference
|
|
to the scalar or array, and will arrange for the object to live as long
|
|
as the subroutine does. If C<sv> points to a scalar then the inlining
|
|
assumes that the value of the scalar will never change, so the caller
|
|
must ensure that the scalar is not subsequently written to. If C<sv>
|
|
points to an array then no such assumption is made, so it is ostensibly
|
|
safe to mutate the array or its elements, but whether this is really
|
|
supported has not been determined.
|
|
|
|
The subroutine will have C<CvFILE> set according to C<PL_curcop>.
|
|
Other aspects of the subroutine will be left in their default state.
|
|
The caller is free to mutate the subroutine beyond its initial state
|
|
after this function has returned.
|
|
|
|
If C<name> is null then the subroutine will be anonymous, with its
|
|
C<CvGV> referring to an C<__ANON__> glob. If C<name> is non-null then the
|
|
subroutine will be named accordingly, referenced by the appropriate glob.
|
|
C<name> is a string of length C<len> bytes giving a sigilless symbol
|
|
name, in UTF-8 if C<flags> has the C<SVf_UTF8> bit set and in Latin-1
|
|
otherwise. The name may be either qualified or unqualified. If the
|
|
name is unqualified then it defaults to being in the stash specified by
|
|
C<stash> if that is non-null, or to C<PL_curstash> if C<stash> is null.
|
|
The symbol is always added to the stash if necessary, with C<GV_ADDMULTI>
|
|
semantics.
|
|
|
|
C<flags> should not have bits set other than C<SVf_UTF8>.
|
|
|
|
If there is already a subroutine of the specified name, then the new sub
|
|
will replace the existing one in the glob. A warning may be generated
|
|
about the redefinition.
|
|
|
|
If the subroutine has one of a few special names, such as C<BEGIN> or
|
|
C<END>, then it will be claimed by the appropriate queue for automatic
|
|
running of phase-related subroutines. In this case the relevant glob will
|
|
be left not containing any subroutine, even if it did contain one before.
|
|
Execution of the subroutine will likely be a no-op, unless C<sv> was
|
|
a tied array or the caller modified the subroutine in some interesting
|
|
way before it was executed. In the case of C<BEGIN>, the treatment is
|
|
buggy: the sub will be executed when only half built, and may be deleted
|
|
prematurely, possibly causing a crash.
|
|
|
|
The function returns a pointer to the constructed subroutine. If the sub
|
|
is anonymous then ownership of one counted reference to the subroutine
|
|
is transferred to the caller. If the sub is named then the caller does
|
|
not get ownership of a reference. In most such cases, where the sub
|
|
has a non-phase name, the sub will be alive at the point it is returned
|
|
by virtue of being contained in the glob that names it. A phase-named
|
|
subroutine will usually be alive by virtue of the reference owned by
|
|
the phase's automatic run queue. A C<BEGIN> subroutine may have been
|
|
destroyed already by the time this function returns, but currently bugs
|
|
occur in that case before the caller gets control. It is the caller's
|
|
responsibility to ensure that it knows which of these situations applies.
|
|
|
|
CV* newCONSTSUB_flags(HV* stash, const char* name,
|
|
STRLEN len, U32 flags, SV* sv)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item newXS
|
|
X<newXS>
|
|
|
|
Used by C<xsubpp> to hook up XSUBs as Perl subs. C<filename> needs to be
|
|
static storage, as it is used directly as CvFILE(), without a copy being made.
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item op_append_elem
|
|
X<op_append_elem>
|
|
|
|
Append an item to the list of ops contained directly within a list-type
|
|
op, returning the lengthened list. C<first> is the list-type op,
|
|
and C<last> is the op to append to the list. C<optype> specifies the
|
|
intended opcode for the list. If C<first> is not already a list of the
|
|
right type, it will be upgraded into one. If either C<first> or C<last>
|
|
is null, the other is returned unchanged.
|
|
|
|
OP* op_append_elem(I32 optype, OP* first, OP* last)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item op_append_list
|
|
X<op_append_list>
|
|
|
|
Concatenate the lists of ops contained directly within two list-type ops,
|
|
returning the combined list. C<first> and C<last> are the list-type ops
|
|
to concatenate. C<optype> specifies the intended opcode for the list.
|
|
If either C<first> or C<last> is not already a list of the right type,
|
|
it will be upgraded into one. If either C<first> or C<last> is null,
|
|
the other is returned unchanged.
|
|
|
|
OP* op_append_list(I32 optype, OP* first, OP* last)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item OP_CLASS
|
|
X<OP_CLASS>
|
|
|
|
Return the class of the provided OP: that is, which of the *OP
|
|
structures it uses. For core ops this currently gets the information out
|
|
of C<PL_opargs>, which does not always accurately reflect the type used;
|
|
in v5.26 onwards, see also the function C<L</op_class>> which can do a better
|
|
job of determining the used type.
|
|
|
|
For custom ops the type is returned from the registration, and it is up
|
|
to the registree to ensure it is accurate. The value returned will be
|
|
one of the C<OA_>* constants from F<op.h>.
|
|
|
|
U32 OP_CLASS(OP *o)
|
|
|
|
=for hackers
|
|
Found in file op.h
|
|
|
|
=item op_contextualize
|
|
X<op_contextualize>
|
|
|
|
Applies a syntactic context to an op tree representing an expression.
|
|
C<o> is the op tree, and C<context> must be C<G_SCALAR>, C<G_ARRAY>,
|
|
or C<G_VOID> to specify the context to apply. The modified op tree
|
|
is returned.
|
|
|
|
OP* op_contextualize(OP* o, I32 context)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item op_convert_list
|
|
X<op_convert_list>
|
|
|
|
Converts C<o> into a list op if it is not one already, and then converts it
|
|
into the specified C<type>, calling its check function, allocating a target if
|
|
it needs one, and folding constants.
|
|
|
|
A list-type op is usually constructed one kid at a time via C<newLISTOP>,
|
|
C<op_prepend_elem> and C<op_append_elem>. Then finally it is passed to
|
|
C<op_convert_list> to make it the right type.
|
|
|
|
OP* op_convert_list(I32 optype, I32 flags, OP* o)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item OP_DESC
|
|
X<OP_DESC>
|
|
|
|
Return a short description of the provided OP.
|
|
|
|
const char * OP_DESC(OP *o)
|
|
|
|
=for hackers
|
|
Found in file op.h
|
|
|
|
=item op_free
|
|
X<op_free>
|
|
|
|
Free an op and its children. Only use this when an op is no longer linked
|
|
to from any optree.
|
|
|
|
void op_free(OP* arg)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item OpHAS_SIBLING
|
|
X<OpHAS_SIBLING>
|
|
|
|
Returns true if C<o> has a sibling
|
|
|
|
bool OpHAS_SIBLING(OP *o)
|
|
|
|
=for hackers
|
|
Found in file op.h
|
|
|
|
=item OpLASTSIB_set
|
|
X<OpLASTSIB_set>
|
|
|
|
Marks C<o> as having no further siblings and marks
|
|
o as having the specified parent. See also C<L</OpMORESIB_set>> and
|
|
C<OpMAYBESIB_set>. For a higher-level interface, see
|
|
C<L</op_sibling_splice>>.
|
|
|
|
void OpLASTSIB_set(OP *o, OP *parent)
|
|
|
|
=for hackers
|
|
Found in file op.h
|
|
|
|
=item op_linklist
|
|
X<op_linklist>
|
|
|
|
This function is the implementation of the L</LINKLIST> macro. It should
|
|
not be called directly.
|
|
|
|
OP* op_linklist(OP *o)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item op_lvalue
|
|
X<op_lvalue>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Propagate lvalue ("modifiable") context to an op and its children.
|
|
C<type> represents the context type, roughly based on the type of op that
|
|
would do the modifying, although C<local()> is represented by C<OP_NULL>,
|
|
because it has no op type of its own (it is signalled by a flag on
|
|
the lvalue op).
|
|
|
|
This function detects things that can't be modified, such as C<$x+1>, and
|
|
generates errors for them. For example, C<$x+1 = 2> would cause it to be
|
|
called with an op of type C<OP_ADD> and a C<type> argument of C<OP_SASSIGN>.
|
|
|
|
It also flags things that need to behave specially in an lvalue context,
|
|
such as C<$$x = 5> which might have to vivify a reference in C<$x>.
|
|
|
|
OP* op_lvalue(OP* o, I32 type)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item OpMAYBESIB_set
|
|
X<OpMAYBESIB_set>
|
|
|
|
Conditionally does C<OpMORESIB_set> or C<OpLASTSIB_set> depending on whether
|
|
C<sib> is non-null. For a higher-level interface, see C<L</op_sibling_splice>>.
|
|
|
|
void OpMAYBESIB_set(OP *o, OP *sib, OP *parent)
|
|
|
|
=for hackers
|
|
Found in file op.h
|
|
|
|
=item OpMORESIB_set
|
|
X<OpMORESIB_set>
|
|
|
|
Sets the sibling of C<o> to the non-zero value C<sib>. See also C<L</OpLASTSIB_set>>
|
|
and C<L</OpMAYBESIB_set>>. For a higher-level interface, see
|
|
C<L</op_sibling_splice>>.
|
|
|
|
void OpMORESIB_set(OP *o, OP *sib)
|
|
|
|
=for hackers
|
|
Found in file op.h
|
|
|
|
=item OP_NAME
|
|
X<OP_NAME>
|
|
|
|
Return the name of the provided OP. For core ops this looks up the name
|
|
from the op_type; for custom ops from the op_ppaddr.
|
|
|
|
const char * OP_NAME(OP *o)
|
|
|
|
=for hackers
|
|
Found in file op.h
|
|
|
|
=item op_null
|
|
X<op_null>
|
|
|
|
Neutralizes an op when it is no longer needed, but is still linked to from
|
|
other ops.
|
|
|
|
void op_null(OP* o)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item op_parent
|
|
X<op_parent>
|
|
|
|
Returns the parent OP of C<o>, if it has a parent. Returns C<NULL> otherwise.
|
|
|
|
OP* op_parent(OP *o)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item op_prepend_elem
|
|
X<op_prepend_elem>
|
|
|
|
Prepend an item to the list of ops contained directly within a list-type
|
|
op, returning the lengthened list. C<first> is the op to prepend to the
|
|
list, and C<last> is the list-type op. C<optype> specifies the intended
|
|
opcode for the list. If C<last> is not already a list of the right type,
|
|
it will be upgraded into one. If either C<first> or C<last> is null,
|
|
the other is returned unchanged.
|
|
|
|
OP* op_prepend_elem(I32 optype, OP* first, OP* last)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item op_scope
|
|
X<op_scope>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Wraps up an op tree with some additional ops so that at runtime a dynamic
|
|
scope will be created. The original ops run in the new dynamic scope,
|
|
and then, provided that they exit normally, the scope will be unwound.
|
|
The additional ops used to create and unwind the dynamic scope will
|
|
normally be an C<enter>/C<leave> pair, but a C<scope> op may be used
|
|
instead if the ops are simple enough to not need the full dynamic scope
|
|
structure.
|
|
|
|
OP* op_scope(OP* o)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item OpSIBLING
|
|
X<OpSIBLING>
|
|
|
|
Returns the sibling of C<o>, or C<NULL> if there is no sibling
|
|
|
|
OP* OpSIBLING(OP *o)
|
|
|
|
=for hackers
|
|
Found in file op.h
|
|
|
|
=item op_sibling_splice
|
|
X<op_sibling_splice>
|
|
|
|
A general function for editing the structure of an existing chain of
|
|
op_sibling nodes. By analogy with the perl-level C<splice()> function, allows
|
|
you to delete zero or more sequential nodes, replacing them with zero or
|
|
more different nodes. Performs the necessary op_first/op_last
|
|
housekeeping on the parent node and op_sibling manipulation on the
|
|
children. The last deleted node will be marked as the last node by
|
|
updating the op_sibling/op_sibparent or op_moresib field as appropriate.
|
|
|
|
Note that op_next is not manipulated, and nodes are not freed; that is the
|
|
responsibility of the caller. It also won't create a new list op for an
|
|
empty list etc; use higher-level functions like op_append_elem() for that.
|
|
|
|
C<parent> is the parent node of the sibling chain. It may passed as C<NULL> if
|
|
the splicing doesn't affect the first or last op in the chain.
|
|
|
|
C<start> is the node preceding the first node to be spliced. Node(s)
|
|
following it will be deleted, and ops will be inserted after it. If it is
|
|
C<NULL>, the first node onwards is deleted, and nodes are inserted at the
|
|
beginning.
|
|
|
|
C<del_count> is the number of nodes to delete. If zero, no nodes are deleted.
|
|
If -1 or greater than or equal to the number of remaining kids, all
|
|
remaining kids are deleted.
|
|
|
|
C<insert> is the first of a chain of nodes to be inserted in place of the nodes.
|
|
If C<NULL>, no nodes are inserted.
|
|
|
|
The head of the chain of deleted ops is returned, or C<NULL> if no ops were
|
|
deleted.
|
|
|
|
For example:
|
|
|
|
action before after returns
|
|
------ ----- ----- -------
|
|
|
|
P P
|
|
splice(P, A, 2, X-Y-Z) | | B-C
|
|
A-B-C-D A-X-Y-Z-D
|
|
|
|
P P
|
|
splice(P, NULL, 1, X-Y) | | A
|
|
A-B-C-D X-Y-B-C-D
|
|
|
|
P P
|
|
splice(P, NULL, 3, NULL) | | A-B-C
|
|
A-B-C-D D
|
|
|
|
P P
|
|
splice(P, B, 0, X-Y) | | NULL
|
|
A-B-C-D A-B-X-Y-C-D
|
|
|
|
|
|
For lower-level direct manipulation of C<op_sibparent> and C<op_moresib>,
|
|
see C<L</OpMORESIB_set>>, C<L</OpLASTSIB_set>>, C<L</OpMAYBESIB_set>>.
|
|
|
|
OP* op_sibling_splice(OP *parent, OP *start,
|
|
int del_count, OP* insert)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
=item OP_TYPE_IS
|
|
X<OP_TYPE_IS>
|
|
|
|
Returns true if the given OP is not a C<NULL> pointer
|
|
and if it is of the given type.
|
|
|
|
The negation of this macro, C<OP_TYPE_ISNT> is also available
|
|
as well as C<OP_TYPE_IS_NN> and C<OP_TYPE_ISNT_NN> which elide
|
|
the NULL pointer check.
|
|
|
|
bool OP_TYPE_IS(OP *o, Optype type)
|
|
|
|
=for hackers
|
|
Found in file op.h
|
|
|
|
=item OP_TYPE_IS_OR_WAS
|
|
X<OP_TYPE_IS_OR_WAS>
|
|
|
|
Returns true if the given OP is not a NULL pointer and
|
|
if it is of the given type or used to be before being
|
|
replaced by an OP of type OP_NULL.
|
|
|
|
The negation of this macro, C<OP_TYPE_ISNT_AND_WASNT>
|
|
is also available as well as C<OP_TYPE_IS_OR_WAS_NN>
|
|
and C<OP_TYPE_ISNT_AND_WASNT_NN> which elide
|
|
the C<NULL> pointer check.
|
|
|
|
bool OP_TYPE_IS_OR_WAS(OP *o, Optype type)
|
|
|
|
=for hackers
|
|
Found in file op.h
|
|
|
|
=item rv2cv_op_cv
|
|
X<rv2cv_op_cv>
|
|
|
|
Examines an op, which is expected to identify a subroutine at runtime,
|
|
and attempts to determine at compile time which subroutine it identifies.
|
|
This is normally used during Perl compilation to determine whether
|
|
a prototype can be applied to a function call. C<cvop> is the op
|
|
being considered, normally an C<rv2cv> op. A pointer to the identified
|
|
subroutine is returned, if it could be determined statically, and a null
|
|
pointer is returned if it was not possible to determine statically.
|
|
|
|
Currently, the subroutine can be identified statically if the RV that the
|
|
C<rv2cv> is to operate on is provided by a suitable C<gv> or C<const> op.
|
|
A C<gv> op is suitable if the GV's CV slot is populated. A C<const> op is
|
|
suitable if the constant value must be an RV pointing to a CV. Details of
|
|
this process may change in future versions of Perl. If the C<rv2cv> op
|
|
has the C<OPpENTERSUB_AMPER> flag set then no attempt is made to identify
|
|
the subroutine statically: this flag is used to suppress compile-time
|
|
magic on a subroutine call, forcing it to use default runtime behaviour.
|
|
|
|
If C<flags> has the bit C<RV2CVOPCV_MARK_EARLY> set, then the handling
|
|
of a GV reference is modified. If a GV was examined and its CV slot was
|
|
found to be empty, then the C<gv> op has the C<OPpEARLY_CV> flag set.
|
|
If the op is not optimised away, and the CV slot is later populated with
|
|
a subroutine having a prototype, that flag eventually triggers the warning
|
|
"called too early to check prototype".
|
|
|
|
If C<flags> has the bit C<RV2CVOPCV_RETURN_NAME_GV> set, then instead
|
|
of returning a pointer to the subroutine it returns a pointer to the
|
|
GV giving the most appropriate name for the subroutine in this context.
|
|
Normally this is just the C<CvGV> of the subroutine, but for an anonymous
|
|
(C<CvANON>) subroutine that is referenced through a GV it will be the
|
|
referencing GV. The resulting C<GV*> is cast to C<CV*> to be returned.
|
|
A null pointer is returned as usual if there is no statically-determinable
|
|
subroutine.
|
|
|
|
CV* rv2cv_op_cv(OP *cvop, U32 flags)
|
|
|
|
=for hackers
|
|
Found in file op.c
|
|
|
|
|
|
=back
|
|
|
|
=head1 Pack and Unpack
|
|
|
|
=over 8
|
|
|
|
=item packlist
|
|
X<packlist>
|
|
|
|
The engine implementing C<pack()> Perl function.
|
|
|
|
void packlist(SV *cat, const char *pat,
|
|
const char *patend, SV **beglist,
|
|
SV **endlist)
|
|
|
|
=for hackers
|
|
Found in file pp_pack.c
|
|
|
|
=item unpackstring
|
|
X<unpackstring>
|
|
|
|
The engine implementing the C<unpack()> Perl function.
|
|
|
|
Using the template C<pat..patend>, this function unpacks the string
|
|
C<s..strend> into a number of mortal SVs, which it pushes onto the perl
|
|
argument (C<@_>) stack (so you will need to issue a C<PUTBACK> before and
|
|
C<SPAGAIN> after the call to this function). It returns the number of
|
|
pushed elements.
|
|
|
|
The C<strend> and C<patend> pointers should point to the byte following the
|
|
last character of each string.
|
|
|
|
Although this function returns its values on the perl argument stack, it
|
|
doesn't take any parameters from that stack (and thus in particular
|
|
there's no need to do a C<PUSHMARK> before calling it, unlike L</call_pv> for
|
|
example).
|
|
|
|
SSize_t unpackstring(const char *pat,
|
|
const char *patend, const char *s,
|
|
const char *strend, U32 flags)
|
|
|
|
=for hackers
|
|
Found in file pp_pack.c
|
|
|
|
|
|
=back
|
|
|
|
=head1 Pad Data Structures
|
|
|
|
=over 8
|
|
|
|
=item CvPADLIST
|
|
X<CvPADLIST>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
CV's can have CvPADLIST(cv) set to point to a PADLIST. This is the CV's
|
|
scratchpad, which stores lexical variables and opcode temporary and
|
|
per-thread values.
|
|
|
|
For these purposes "formats" are a kind-of CV; eval""s are too (except they're
|
|
not callable at will and are always thrown away after the eval"" is done
|
|
executing). Require'd files are simply evals without any outer lexical
|
|
scope.
|
|
|
|
XSUBs do not have a C<CvPADLIST>. C<dXSTARG> fetches values from C<PL_curpad>,
|
|
but that is really the callers pad (a slot of which is allocated by
|
|
every entersub). Do not get or set C<CvPADLIST> if a CV is an XSUB (as
|
|
determined by C<CvISXSUB()>), C<CvPADLIST> slot is reused for a different
|
|
internal purpose in XSUBs.
|
|
|
|
The PADLIST has a C array where pads are stored.
|
|
|
|
The 0th entry of the PADLIST is a PADNAMELIST
|
|
which represents the "names" or rather
|
|
the "static type information" for lexicals. The individual elements of a
|
|
PADNAMELIST are PADNAMEs. Future
|
|
refactorings might stop the PADNAMELIST from being stored in the PADLIST's
|
|
array, so don't rely on it. See L</PadlistNAMES>.
|
|
|
|
The CvDEPTH'th entry of a PADLIST is a PAD (an AV) which is the stack frame
|
|
at that depth of recursion into the CV. The 0th slot of a frame AV is an
|
|
AV which is C<@_>. Other entries are storage for variables and op targets.
|
|
|
|
Iterating over the PADNAMELIST iterates over all possible pad
|
|
items. Pad slots for targets (C<SVs_PADTMP>)
|
|
and GVs end up having &PL_padname_undef "names", while slots for constants
|
|
have C<&PL_padname_const> "names" (see C<L</pad_alloc>>). That
|
|
C<&PL_padname_undef>
|
|
and C<&PL_padname_const> are used is an implementation detail subject to
|
|
change. To test for them, use C<!PadnamePV(name)> and
|
|
S<C<PadnamePV(name) && !PadnameLEN(name)>>, respectively.
|
|
|
|
Only C<my>/C<our> variable slots get valid names.
|
|
The rest are op targets/GVs/constants which are statically allocated
|
|
or resolved at compile time. These don't have names by which they
|
|
can be looked up from Perl code at run time through eval"" the way
|
|
C<my>/C<our> variables can be. Since they can't be looked up by "name"
|
|
but only by their index allocated at compile time (which is usually
|
|
in C<< PL_op->op_targ >>), wasting a name SV for them doesn't make sense.
|
|
|
|
The pad names in the PADNAMELIST have their PV holding the name of
|
|
the variable. The C<COP_SEQ_RANGE_LOW> and C<_HIGH> fields form a range
|
|
(low+1..high inclusive) of cop_seq numbers for which the name is
|
|
valid. During compilation, these fields may hold the special value
|
|
PERL_PADSEQ_INTRO to indicate various stages:
|
|
|
|
COP_SEQ_RANGE_LOW _HIGH
|
|
----------------- -----
|
|
PERL_PADSEQ_INTRO 0 variable not yet introduced:
|
|
{ my ($x
|
|
valid-seq# PERL_PADSEQ_INTRO variable in scope:
|
|
{ my ($x);
|
|
valid-seq# valid-seq# compilation of scope complete:
|
|
{ my ($x); .... }
|
|
|
|
When a lexical var hasn't yet been introduced, it already exists from the
|
|
perspective of duplicate declarations, but not for variable lookups, e.g.
|
|
|
|
my ($x, $x); # '"my" variable $x masks earlier declaration'
|
|
my $x = $x; # equal to my $x = $::x;
|
|
|
|
For typed lexicals C<PadnameTYPE> points at the type stash. For C<our>
|
|
lexicals, C<PadnameOURSTASH> points at the stash of the associated global (so
|
|
that duplicate C<our> declarations in the same package can be detected).
|
|
C<PadnameGEN> is sometimes used to store the generation number during
|
|
compilation.
|
|
|
|
If C<PadnameOUTER> is set on the pad name, then that slot in the frame AV
|
|
is a REFCNT'ed reference to a lexical from "outside". Such entries
|
|
are sometimes referred to as 'fake'. In this case, the name does not
|
|
use 'low' and 'high' to store a cop_seq range, since it is in scope
|
|
throughout. Instead 'high' stores some flags containing info about
|
|
the real lexical (is it declared in an anon, and is it capable of being
|
|
instantiated multiple times?), and for fake ANONs, 'low' contains the index
|
|
within the parent's pad where the lexical's value is stored, to make
|
|
cloning quicker.
|
|
|
|
If the 'name' is C<&> the corresponding entry in the PAD
|
|
is a CV representing a possible closure.
|
|
|
|
Note that formats are treated as anon subs, and are cloned each time
|
|
write is called (if necessary).
|
|
|
|
The flag C<SVs_PADSTALE> is cleared on lexicals each time the C<my()> is executed,
|
|
and set on scope exit. This allows the
|
|
C<"Variable $x is not available"> warning
|
|
to be generated in evals, such as
|
|
|
|
{ my $x = 1; sub f { eval '$x'} } f();
|
|
|
|
For state vars, C<SVs_PADSTALE> is overloaded to mean 'not yet initialised',
|
|
but this internal state is stored in a separate pad entry.
|
|
|
|
PADLIST * CvPADLIST(CV *cv)
|
|
|
|
=for hackers
|
|
Found in file pad.c
|
|
|
|
=item pad_add_name_pvs
|
|
X<pad_add_name_pvs>
|
|
|
|
Exactly like L</pad_add_name_pvn>, but takes a literal string
|
|
instead of a string/length pair.
|
|
|
|
PADOFFSET pad_add_name_pvs("name", U32 flags,
|
|
HV *typestash, HV *ourstash)
|
|
|
|
=for hackers
|
|
Found in file pad.h
|
|
|
|
=item PadARRAY
|
|
X<PadARRAY>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
The C array of pad entries.
|
|
|
|
SV ** PadARRAY(PAD * pad)
|
|
|
|
=for hackers
|
|
Found in file pad.h
|
|
|
|
=item pad_findmy_pvs
|
|
X<pad_findmy_pvs>
|
|
|
|
Exactly like L</pad_findmy_pvn>, but takes a literal string
|
|
instead of a string/length pair.
|
|
|
|
PADOFFSET pad_findmy_pvs("name", U32 flags)
|
|
|
|
=for hackers
|
|
Found in file pad.h
|
|
|
|
=item PadlistARRAY
|
|
X<PadlistARRAY>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
The C array of a padlist, containing the pads. Only subscript it with
|
|
numbers >= 1, as the 0th entry is not guaranteed to remain usable.
|
|
|
|
PAD ** PadlistARRAY(PADLIST * padlist)
|
|
|
|
=for hackers
|
|
Found in file pad.h
|
|
|
|
=item PadlistMAX
|
|
X<PadlistMAX>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
The index of the last allocated space in the padlist. Note that the last
|
|
pad may be in an earlier slot. Any entries following it will be C<NULL> in
|
|
that case.
|
|
|
|
SSize_t PadlistMAX(PADLIST * padlist)
|
|
|
|
=for hackers
|
|
Found in file pad.h
|
|
|
|
=item PadlistNAMES
|
|
X<PadlistNAMES>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
The names associated with pad entries.
|
|
|
|
PADNAMELIST * PadlistNAMES(PADLIST * padlist)
|
|
|
|
=for hackers
|
|
Found in file pad.h
|
|
|
|
=item PadlistNAMESARRAY
|
|
X<PadlistNAMESARRAY>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
The C array of pad names.
|
|
|
|
PADNAME ** PadlistNAMESARRAY(PADLIST * padlist)
|
|
|
|
=for hackers
|
|
Found in file pad.h
|
|
|
|
=item PadlistNAMESMAX
|
|
X<PadlistNAMESMAX>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
The index of the last pad name.
|
|
|
|
SSize_t PadlistNAMESMAX(PADLIST * padlist)
|
|
|
|
=for hackers
|
|
Found in file pad.h
|
|
|
|
=item PadlistREFCNT
|
|
X<PadlistREFCNT>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
The reference count of the padlist. Currently this is always 1.
|
|
|
|
U32 PadlistREFCNT(PADLIST * padlist)
|
|
|
|
=for hackers
|
|
Found in file pad.h
|
|
|
|
=item PadMAX
|
|
X<PadMAX>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
The index of the last pad entry.
|
|
|
|
SSize_t PadMAX(PAD * pad)
|
|
|
|
=for hackers
|
|
Found in file pad.h
|
|
|
|
=item PadnameLEN
|
|
X<PadnameLEN>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
The length of the name.
|
|
|
|
STRLEN PadnameLEN(PADNAME * pn)
|
|
|
|
=for hackers
|
|
Found in file pad.h
|
|
|
|
=item PadnamelistARRAY
|
|
X<PadnamelistARRAY>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
The C array of pad names.
|
|
|
|
PADNAME ** PadnamelistARRAY(PADNAMELIST * pnl)
|
|
|
|
=for hackers
|
|
Found in file pad.h
|
|
|
|
=item PadnamelistMAX
|
|
X<PadnamelistMAX>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
The index of the last pad name.
|
|
|
|
SSize_t PadnamelistMAX(PADNAMELIST * pnl)
|
|
|
|
=for hackers
|
|
Found in file pad.h
|
|
|
|
=item PadnamelistREFCNT
|
|
X<PadnamelistREFCNT>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
The reference count of the pad name list.
|
|
|
|
SSize_t PadnamelistREFCNT(PADNAMELIST * pnl)
|
|
|
|
=for hackers
|
|
Found in file pad.h
|
|
|
|
=item PadnamelistREFCNT_dec
|
|
X<PadnamelistREFCNT_dec>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Lowers the reference count of the pad name list.
|
|
|
|
void PadnamelistREFCNT_dec(PADNAMELIST * pnl)
|
|
|
|
=for hackers
|
|
Found in file pad.h
|
|
|
|
=item PadnamePV
|
|
X<PadnamePV>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
The name stored in the pad name struct. This returns C<NULL> for a target
|
|
slot.
|
|
|
|
char * PadnamePV(PADNAME * pn)
|
|
|
|
=for hackers
|
|
Found in file pad.h
|
|
|
|
=item PadnameREFCNT
|
|
X<PadnameREFCNT>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
The reference count of the pad name.
|
|
|
|
SSize_t PadnameREFCNT(PADNAME * pn)
|
|
|
|
=for hackers
|
|
Found in file pad.h
|
|
|
|
=item PadnameREFCNT_dec
|
|
X<PadnameREFCNT_dec>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Lowers the reference count of the pad name.
|
|
|
|
|
|
void PadnameREFCNT_dec(PADNAME * pn)
|
|
|
|
=for hackers
|
|
Found in file pad.h
|
|
|
|
=item PadnameSV
|
|
X<PadnameSV>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Returns the pad name as a mortal SV.
|
|
|
|
SV * PadnameSV(PADNAME * pn)
|
|
|
|
=for hackers
|
|
Found in file pad.h
|
|
|
|
=item PadnameUTF8
|
|
X<PadnameUTF8>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Whether PadnamePV is in UTF-8. Currently, this is always true.
|
|
|
|
bool PadnameUTF8(PADNAME * pn)
|
|
|
|
=for hackers
|
|
Found in file pad.h
|
|
|
|
=item pad_new
|
|
X<pad_new>
|
|
|
|
Create a new padlist, updating the global variables for the
|
|
currently-compiling padlist to point to the new padlist. The following
|
|
flags can be OR'ed together:
|
|
|
|
padnew_CLONE this pad is for a cloned CV
|
|
padnew_SAVE save old globals on the save stack
|
|
padnew_SAVESUB also save extra stuff for start of sub
|
|
|
|
PADLIST* pad_new(int flags)
|
|
|
|
=for hackers
|
|
Found in file pad.c
|
|
|
|
=item PL_comppad
|
|
X<PL_comppad>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
During compilation, this points to the array containing the values
|
|
part of the pad for the currently-compiling code. (At runtime a CV may
|
|
have many such value arrays; at compile time just one is constructed.)
|
|
At runtime, this points to the array containing the currently-relevant
|
|
values for the pad for the currently-executing code.
|
|
|
|
=for hackers
|
|
Found in file pad.c
|
|
|
|
=item PL_comppad_name
|
|
X<PL_comppad_name>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
During compilation, this points to the array containing the names part
|
|
of the pad for the currently-compiling code.
|
|
|
|
=for hackers
|
|
Found in file pad.c
|
|
|
|
=item PL_curpad
|
|
X<PL_curpad>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Points directly to the body of the L</PL_comppad> array.
|
|
(I.e., this is C<PadARRAY(PL_comppad)>.)
|
|
|
|
=for hackers
|
|
Found in file pad.c
|
|
|
|
|
|
=back
|
|
|
|
=head1 Per-Interpreter Variables
|
|
|
|
=over 8
|
|
|
|
=item PL_curcop
|
|
X<PL_curcop>
|
|
|
|
The currently active COP (control op) roughly representing the current
|
|
statement in the source.
|
|
|
|
COP* PL_curcop
|
|
|
|
=for hackers
|
|
Found in file intrpvar.h
|
|
|
|
=item PL_curstash
|
|
X<PL_curstash>
|
|
|
|
The stash for the package code will be compiled into.
|
|
|
|
HV* PL_curstash
|
|
|
|
=for hackers
|
|
Found in file intrpvar.h
|
|
|
|
=item PL_defgv
|
|
X<PL_defgv>
|
|
|
|
The GV representing C<*_>. Useful for access to C<$_>.
|
|
|
|
GV * PL_defgv
|
|
|
|
=for hackers
|
|
Found in file intrpvar.h
|
|
|
|
=item PL_exit_flags
|
|
X<PL_exit_flags>
|
|
|
|
Contains flags controlling perl's behaviour on exit():
|
|
|
|
=over
|
|
|
|
=item * C<PERL_EXIT_DESTRUCT_END>
|
|
|
|
If set, END blocks are executed when the interpreter is destroyed.
|
|
This is normally set by perl itself after the interpreter is
|
|
constructed.
|
|
|
|
=item * C<PERL_EXIT_ABORT>
|
|
|
|
Call C<abort()> on exit. This is used internally by perl itself to
|
|
abort if exit is called while processing exit.
|
|
|
|
=item * C<PERL_EXIT_WARN>
|
|
|
|
Warn on exit.
|
|
|
|
=item * C<PERL_EXIT_EXPECTED>
|
|
|
|
Set by the L<perlfunc/exit> operator.
|
|
|
|
=back
|
|
|
|
U8 PL_exit_flags
|
|
|
|
=for hackers
|
|
Found in file intrpvar.h
|
|
|
|
=item PL_modglobal
|
|
X<PL_modglobal>
|
|
|
|
C<PL_modglobal> is a general purpose, interpreter global HV for use by
|
|
extensions that need to keep information on a per-interpreter basis.
|
|
In a pinch, it can also be used as a symbol table for extensions
|
|
to share data among each other. It is a good idea to use keys
|
|
prefixed by the package name of the extension that owns the data.
|
|
|
|
HV* PL_modglobal
|
|
|
|
=for hackers
|
|
Found in file intrpvar.h
|
|
|
|
=item PL_na
|
|
X<PL_na>
|
|
|
|
A convenience variable which is typically used with C<SvPV> when one
|
|
doesn't care about the length of the string. It is usually more efficient
|
|
to either declare a local variable and use that instead or to use the
|
|
C<SvPV_nolen> macro.
|
|
|
|
STRLEN PL_na
|
|
|
|
=for hackers
|
|
Found in file intrpvar.h
|
|
|
|
=item PL_opfreehook
|
|
X<PL_opfreehook>
|
|
|
|
When non-C<NULL>, the function pointed by this variable will be called each time an OP is freed with the corresponding OP as the argument.
|
|
This allows extensions to free any extra attribute they have locally attached to an OP.
|
|
It is also assured to first fire for the parent OP and then for its kids.
|
|
|
|
When you replace this variable, it is considered a good practice to store the possibly previously installed hook and that you recall it inside your own.
|
|
|
|
Perl_ophook_t PL_opfreehook
|
|
|
|
=for hackers
|
|
Found in file intrpvar.h
|
|
|
|
=item PL_peepp
|
|
X<PL_peepp>
|
|
|
|
Pointer to the per-subroutine peephole optimiser. This is a function
|
|
that gets called at the end of compilation of a Perl subroutine (or
|
|
equivalently independent piece of Perl code) to perform fixups of
|
|
some ops and to perform small-scale optimisations. The function is
|
|
called once for each subroutine that is compiled, and is passed, as sole
|
|
parameter, a pointer to the op that is the entry point to the subroutine.
|
|
It modifies the op tree in place.
|
|
|
|
The peephole optimiser should never be completely replaced. Rather,
|
|
add code to it by wrapping the existing optimiser. The basic way to do
|
|
this can be seen in L<perlguts/Compile pass 3: peephole optimization>.
|
|
If the new code wishes to operate on ops throughout the subroutine's
|
|
structure, rather than just at the top level, it is likely to be more
|
|
convenient to wrap the L</PL_rpeepp> hook.
|
|
|
|
peep_t PL_peepp
|
|
|
|
=for hackers
|
|
Found in file intrpvar.h
|
|
|
|
=item PL_perl_destruct_level
|
|
X<PL_perl_destruct_level>
|
|
|
|
This value may be set when embedding for full cleanup.
|
|
|
|
Possible values:
|
|
|
|
=over
|
|
|
|
=item * 0 - none
|
|
|
|
=item * 1 - full
|
|
|
|
=item * 2 or greater - full with checks.
|
|
|
|
=back
|
|
|
|
If C<$ENV{PERL_DESTRUCT_LEVEL}> is set to an integer greater than the
|
|
value of C<PL_perl_destruct_level> its value is used instead.
|
|
|
|
signed char PL_perl_destruct_level
|
|
|
|
=for hackers
|
|
Found in file intrpvar.h
|
|
|
|
=item PL_rpeepp
|
|
X<PL_rpeepp>
|
|
|
|
Pointer to the recursive peephole optimiser. This is a function
|
|
that gets called at the end of compilation of a Perl subroutine (or
|
|
equivalently independent piece of Perl code) to perform fixups of some
|
|
ops and to perform small-scale optimisations. The function is called
|
|
once for each chain of ops linked through their C<op_next> fields;
|
|
it is recursively called to handle each side chain. It is passed, as
|
|
sole parameter, a pointer to the op that is at the head of the chain.
|
|
It modifies the op tree in place.
|
|
|
|
The peephole optimiser should never be completely replaced. Rather,
|
|
add code to it by wrapping the existing optimiser. The basic way to do
|
|
this can be seen in L<perlguts/Compile pass 3: peephole optimization>.
|
|
If the new code wishes to operate only on ops at a subroutine's top level,
|
|
rather than throughout the structure, it is likely to be more convenient
|
|
to wrap the L</PL_peepp> hook.
|
|
|
|
peep_t PL_rpeepp
|
|
|
|
=for hackers
|
|
Found in file intrpvar.h
|
|
|
|
=item PL_runops
|
|
X<PL_runops>
|
|
|
|
See L<perlguts/Pluggable runops>.
|
|
|
|
runops_proc_t PL_runops
|
|
|
|
=for hackers
|
|
Found in file intrpvar.h
|
|
|
|
=item PL_sv_no
|
|
X<PL_sv_no>
|
|
|
|
This is the C<false> SV. See C<L</PL_sv_yes>>. Always refer to this as
|
|
C<&PL_sv_no>.
|
|
|
|
SV PL_sv_no
|
|
|
|
=for hackers
|
|
Found in file intrpvar.h
|
|
|
|
=item PL_sv_undef
|
|
X<PL_sv_undef>
|
|
|
|
This is the C<undef> SV. Always refer to this as C<&PL_sv_undef>.
|
|
|
|
SV PL_sv_undef
|
|
|
|
=for hackers
|
|
Found in file intrpvar.h
|
|
|
|
=item PL_sv_yes
|
|
X<PL_sv_yes>
|
|
|
|
This is the C<true> SV. See C<L</PL_sv_no>>. Always refer to this as
|
|
C<&PL_sv_yes>.
|
|
|
|
SV PL_sv_yes
|
|
|
|
=for hackers
|
|
Found in file intrpvar.h
|
|
|
|
=item PL_sv_zero
|
|
X<PL_sv_zero>
|
|
|
|
This readonly SV has a zero numeric value and a C<"0"> string value. It's
|
|
similar to C<L</PL_sv_no>> except for its string value. Can be used as a
|
|
cheap alternative to C<mXPUSHi(0)> for example. Always refer to this as
|
|
C<&PL_sv_zero>. Introduced in 5.28.
|
|
|
|
SV PL_sv_zero
|
|
|
|
=for hackers
|
|
Found in file intrpvar.h
|
|
|
|
|
|
=back
|
|
|
|
=head1 REGEXP Functions
|
|
|
|
=over 8
|
|
|
|
=item SvRX
|
|
X<SvRX>
|
|
|
|
Convenience macro to get the REGEXP from a SV. This is approximately
|
|
equivalent to the following snippet:
|
|
|
|
if (SvMAGICAL(sv))
|
|
mg_get(sv);
|
|
if (SvROK(sv))
|
|
sv = MUTABLE_SV(SvRV(sv));
|
|
if (SvTYPE(sv) == SVt_REGEXP)
|
|
return (REGEXP*) sv;
|
|
|
|
C<NULL> will be returned if a REGEXP* is not found.
|
|
|
|
REGEXP * SvRX(SV *sv)
|
|
|
|
=for hackers
|
|
Found in file regexp.h
|
|
|
|
=item SvRXOK
|
|
X<SvRXOK>
|
|
|
|
Returns a boolean indicating whether the SV (or the one it references)
|
|
is a REGEXP.
|
|
|
|
If you want to do something with the REGEXP* later use SvRX instead
|
|
and check for NULL.
|
|
|
|
bool SvRXOK(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file regexp.h
|
|
|
|
|
|
=back
|
|
|
|
=head1 Stack Manipulation Macros
|
|
|
|
=over 8
|
|
|
|
=item dMARK
|
|
X<dMARK>
|
|
|
|
Declare a stack marker variable, C<mark>, for the XSUB. See C<L</MARK>> and
|
|
C<L</dORIGMARK>>.
|
|
|
|
dMARK;
|
|
|
|
=for hackers
|
|
Found in file pp.h
|
|
|
|
=item dORIGMARK
|
|
X<dORIGMARK>
|
|
|
|
Saves the original stack mark for the XSUB. See C<L</ORIGMARK>>.
|
|
|
|
dORIGMARK;
|
|
|
|
=for hackers
|
|
Found in file pp.h
|
|
|
|
=item dSP
|
|
X<dSP>
|
|
|
|
Declares a local copy of perl's stack pointer for the XSUB, available via
|
|
the C<SP> macro. See C<L</SP>>.
|
|
|
|
dSP;
|
|
|
|
=for hackers
|
|
Found in file pp.h
|
|
|
|
=item EXTEND
|
|
X<EXTEND>
|
|
|
|
Used to extend the argument stack for an XSUB's return values. Once
|
|
used, guarantees that there is room for at least C<nitems> to be pushed
|
|
onto the stack.
|
|
|
|
void EXTEND(SP, SSize_t nitems)
|
|
|
|
=for hackers
|
|
Found in file pp.h
|
|
|
|
=item MARK
|
|
X<MARK>
|
|
|
|
Stack marker variable for the XSUB. See C<L</dMARK>>.
|
|
|
|
=for hackers
|
|
Found in file pp.h
|
|
|
|
=item mPUSHi
|
|
X<mPUSHi>
|
|
|
|
Push an integer onto the stack. The stack must have room for this element.
|
|
Does not use C<TARG>. See also C<L</PUSHi>>, C<L</mXPUSHi>> and C<L</XPUSHi>>.
|
|
|
|
void mPUSHi(IV iv)
|
|
|
|
=for hackers
|
|
Found in file pp.h
|
|
|
|
=item mPUSHn
|
|
X<mPUSHn>
|
|
|
|
Push a double onto the stack. The stack must have room for this element.
|
|
Does not use C<TARG>. See also C<L</PUSHn>>, C<L</mXPUSHn>> and C<L</XPUSHn>>.
|
|
|
|
void mPUSHn(NV nv)
|
|
|
|
=for hackers
|
|
Found in file pp.h
|
|
|
|
=item mPUSHp
|
|
X<mPUSHp>
|
|
|
|
Push a string onto the stack. The stack must have room for this element.
|
|
The C<len> indicates the length of the string. Does not use C<TARG>.
|
|
See also C<L</PUSHp>>, C<L</mXPUSHp>> and C<L</XPUSHp>>.
|
|
|
|
void mPUSHp(char* str, STRLEN len)
|
|
|
|
=for hackers
|
|
Found in file pp.h
|
|
|
|
=item mPUSHs
|
|
X<mPUSHs>
|
|
|
|
Push an SV onto the stack and mortalizes the SV. The stack must have room
|
|
for this element. Does not use C<TARG>. See also C<L</PUSHs>> and
|
|
C<L</mXPUSHs>>.
|
|
|
|
void mPUSHs(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file pp.h
|
|
|
|
=item mPUSHu
|
|
X<mPUSHu>
|
|
|
|
Push an unsigned integer onto the stack. The stack must have room for this
|
|
element. Does not use C<TARG>. See also C<L</PUSHu>>, C<L</mXPUSHu>> and
|
|
C<L</XPUSHu>>.
|
|
|
|
void mPUSHu(UV uv)
|
|
|
|
=for hackers
|
|
Found in file pp.h
|
|
|
|
=item mXPUSHi
|
|
X<mXPUSHi>
|
|
|
|
Push an integer onto the stack, extending the stack if necessary.
|
|
Does not use C<TARG>. See also C<L</XPUSHi>>, C<L</mPUSHi>> and C<L</PUSHi>>.
|
|
|
|
void mXPUSHi(IV iv)
|
|
|
|
=for hackers
|
|
Found in file pp.h
|
|
|
|
=item mXPUSHn
|
|
X<mXPUSHn>
|
|
|
|
Push a double onto the stack, extending the stack if necessary.
|
|
Does not use C<TARG>. See also C<L</XPUSHn>>, C<L</mPUSHn>> and C<L</PUSHn>>.
|
|
|
|
void mXPUSHn(NV nv)
|
|
|
|
=for hackers
|
|
Found in file pp.h
|
|
|
|
=item mXPUSHp
|
|
X<mXPUSHp>
|
|
|
|
Push a string onto the stack, extending the stack if necessary. The C<len>
|
|
indicates the length of the string. Does not use C<TARG>. See also
|
|
C<L</XPUSHp>>, C<mPUSHp> and C<PUSHp>.
|
|
|
|
void mXPUSHp(char* str, STRLEN len)
|
|
|
|
=for hackers
|
|
Found in file pp.h
|
|
|
|
=item mXPUSHs
|
|
X<mXPUSHs>
|
|
|
|
Push an SV onto the stack, extending the stack if necessary and mortalizes
|
|
the SV. Does not use C<TARG>. See also C<L</XPUSHs>> and C<L</mPUSHs>>.
|
|
|
|
void mXPUSHs(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file pp.h
|
|
|
|
=item mXPUSHu
|
|
X<mXPUSHu>
|
|
|
|
Push an unsigned integer onto the stack, extending the stack if necessary.
|
|
Does not use C<TARG>. See also C<L</XPUSHu>>, C<L</mPUSHu>> and C<L</PUSHu>>.
|
|
|
|
void mXPUSHu(UV uv)
|
|
|
|
=for hackers
|
|
Found in file pp.h
|
|
|
|
=item ORIGMARK
|
|
X<ORIGMARK>
|
|
|
|
The original stack mark for the XSUB. See C<L</dORIGMARK>>.
|
|
|
|
=for hackers
|
|
Found in file pp.h
|
|
|
|
=item POPi
|
|
X<POPi>
|
|
|
|
Pops an integer off the stack.
|
|
|
|
IV POPi
|
|
|
|
=for hackers
|
|
Found in file pp.h
|
|
|
|
=item POPl
|
|
X<POPl>
|
|
|
|
Pops a long off the stack.
|
|
|
|
long POPl
|
|
|
|
=for hackers
|
|
Found in file pp.h
|
|
|
|
=item POPn
|
|
X<POPn>
|
|
|
|
Pops a double off the stack.
|
|
|
|
NV POPn
|
|
|
|
=for hackers
|
|
Found in file pp.h
|
|
|
|
=item POPp
|
|
X<POPp>
|
|
|
|
Pops a string off the stack.
|
|
|
|
char* POPp
|
|
|
|
=for hackers
|
|
Found in file pp.h
|
|
|
|
=item POPpbytex
|
|
X<POPpbytex>
|
|
|
|
Pops a string off the stack which must consist of bytes i.e. characters < 256.
|
|
|
|
char* POPpbytex
|
|
|
|
=for hackers
|
|
Found in file pp.h
|
|
|
|
=item POPpx
|
|
X<POPpx>
|
|
|
|
Pops a string off the stack. Identical to POPp. There are two names for
|
|
historical reasons.
|
|
|
|
char* POPpx
|
|
|
|
=for hackers
|
|
Found in file pp.h
|
|
|
|
=item POPs
|
|
X<POPs>
|
|
|
|
Pops an SV off the stack.
|
|
|
|
SV* POPs
|
|
|
|
=for hackers
|
|
Found in file pp.h
|
|
|
|
=item POPu
|
|
X<POPu>
|
|
|
|
Pops an unsigned integer off the stack.
|
|
|
|
UV POPu
|
|
|
|
=for hackers
|
|
Found in file pp.h
|
|
|
|
=item POPul
|
|
X<POPul>
|
|
|
|
Pops an unsigned long off the stack.
|
|
|
|
long POPul
|
|
|
|
=for hackers
|
|
Found in file pp.h
|
|
|
|
=item PUSHi
|
|
X<PUSHi>
|
|
|
|
Push an integer onto the stack. The stack must have room for this element.
|
|
Handles 'set' magic. Uses C<TARG>, so C<dTARGET> or C<dXSTARG> should be
|
|
called to declare it. Do not call multiple C<TARG>-oriented macros to
|
|
return lists from XSUB's - see C<L</mPUSHi>> instead. See also C<L</XPUSHi>>
|
|
and C<L</mXPUSHi>>.
|
|
|
|
void PUSHi(IV iv)
|
|
|
|
=for hackers
|
|
Found in file pp.h
|
|
|
|
=item PUSHMARK
|
|
X<PUSHMARK>
|
|
|
|
Opening bracket for arguments on a callback. See C<L</PUTBACK>> and
|
|
L<perlcall>.
|
|
|
|
void PUSHMARK(SP)
|
|
|
|
=for hackers
|
|
Found in file pp.h
|
|
|
|
=item PUSHmortal
|
|
X<PUSHmortal>
|
|
|
|
Push a new mortal SV onto the stack. The stack must have room for this
|
|
element. Does not use C<TARG>. See also C<L</PUSHs>>, C<L</XPUSHmortal>> and
|
|
C<L</XPUSHs>>.
|
|
|
|
void PUSHmortal
|
|
|
|
=for hackers
|
|
Found in file pp.h
|
|
|
|
=item PUSHn
|
|
X<PUSHn>
|
|
|
|
Push a double onto the stack. The stack must have room for this element.
|
|
Handles 'set' magic. Uses C<TARG>, so C<dTARGET> or C<dXSTARG> should be
|
|
called to declare it. Do not call multiple C<TARG>-oriented macros to
|
|
return lists from XSUB's - see C<L</mPUSHn>> instead. See also C<L</XPUSHn>>
|
|
and C<L</mXPUSHn>>.
|
|
|
|
void PUSHn(NV nv)
|
|
|
|
=for hackers
|
|
Found in file pp.h
|
|
|
|
=item PUSHp
|
|
X<PUSHp>
|
|
|
|
Push a string onto the stack. The stack must have room for this element.
|
|
The C<len> indicates the length of the string. Handles 'set' magic. Uses
|
|
C<TARG>, so C<dTARGET> or C<dXSTARG> should be called to declare it. Do not
|
|
call multiple C<TARG>-oriented macros to return lists from XSUB's - see
|
|
C<L</mPUSHp>> instead. See also C<L</XPUSHp>> and C<L</mXPUSHp>>.
|
|
|
|
void PUSHp(char* str, STRLEN len)
|
|
|
|
=for hackers
|
|
Found in file pp.h
|
|
|
|
=item PUSHs
|
|
X<PUSHs>
|
|
|
|
Push an SV onto the stack. The stack must have room for this element.
|
|
Does not handle 'set' magic. Does not use C<TARG>. See also
|
|
C<L</PUSHmortal>>, C<L</XPUSHs>>, and C<L</XPUSHmortal>>.
|
|
|
|
void PUSHs(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file pp.h
|
|
|
|
=item PUSHu
|
|
X<PUSHu>
|
|
|
|
Push an unsigned integer onto the stack. The stack must have room for this
|
|
element. Handles 'set' magic. Uses C<TARG>, so C<dTARGET> or C<dXSTARG>
|
|
should be called to declare it. Do not call multiple C<TARG>-oriented
|
|
macros to return lists from XSUB's - see C<L</mPUSHu>> instead. See also
|
|
C<L</XPUSHu>> and C<L</mXPUSHu>>.
|
|
|
|
void PUSHu(UV uv)
|
|
|
|
=for hackers
|
|
Found in file pp.h
|
|
|
|
=item PUTBACK
|
|
X<PUTBACK>
|
|
|
|
Closing bracket for XSUB arguments. This is usually handled by C<xsubpp>.
|
|
See C<L</PUSHMARK>> and L<perlcall> for other uses.
|
|
|
|
PUTBACK;
|
|
|
|
=for hackers
|
|
Found in file pp.h
|
|
|
|
=item SP
|
|
X<SP>
|
|
|
|
Stack pointer. This is usually handled by C<xsubpp>. See C<L</dSP>> and
|
|
C<SPAGAIN>.
|
|
|
|
=for hackers
|
|
Found in file pp.h
|
|
|
|
=item SPAGAIN
|
|
X<SPAGAIN>
|
|
|
|
Refetch the stack pointer. Used after a callback. See L<perlcall>.
|
|
|
|
SPAGAIN;
|
|
|
|
=for hackers
|
|
Found in file pp.h
|
|
|
|
=item XPUSHi
|
|
X<XPUSHi>
|
|
|
|
Push an integer onto the stack, extending the stack if necessary. Handles
|
|
'set' magic. Uses C<TARG>, so C<dTARGET> or C<dXSTARG> should be called to
|
|
declare it. Do not call multiple C<TARG>-oriented macros to return lists
|
|
from XSUB's - see C<L</mXPUSHi>> instead. See also C<L</PUSHi>> and
|
|
C<L</mPUSHi>>.
|
|
|
|
void XPUSHi(IV iv)
|
|
|
|
=for hackers
|
|
Found in file pp.h
|
|
|
|
=item XPUSHmortal
|
|
X<XPUSHmortal>
|
|
|
|
Push a new mortal SV onto the stack, extending the stack if necessary.
|
|
Does not use C<TARG>. See also C<L</XPUSHs>>, C<L</PUSHmortal>> and
|
|
C<L</PUSHs>>.
|
|
|
|
void XPUSHmortal
|
|
|
|
=for hackers
|
|
Found in file pp.h
|
|
|
|
=item XPUSHn
|
|
X<XPUSHn>
|
|
|
|
Push a double onto the stack, extending the stack if necessary. Handles
|
|
'set' magic. Uses C<TARG>, so C<dTARGET> or C<dXSTARG> should be called to
|
|
declare it. Do not call multiple C<TARG>-oriented macros to return lists
|
|
from XSUB's - see C<L</mXPUSHn>> instead. See also C<L</PUSHn>> and
|
|
C<L</mPUSHn>>.
|
|
|
|
void XPUSHn(NV nv)
|
|
|
|
=for hackers
|
|
Found in file pp.h
|
|
|
|
=item XPUSHp
|
|
X<XPUSHp>
|
|
|
|
Push a string onto the stack, extending the stack if necessary. The C<len>
|
|
indicates the length of the string. Handles 'set' magic. Uses C<TARG>, so
|
|
C<dTARGET> or C<dXSTARG> should be called to declare it. Do not call
|
|
multiple C<TARG>-oriented macros to return lists from XSUB's - see
|
|
C<L</mXPUSHp>> instead. See also C<L</PUSHp>> and C<L</mPUSHp>>.
|
|
|
|
void XPUSHp(char* str, STRLEN len)
|
|
|
|
=for hackers
|
|
Found in file pp.h
|
|
|
|
=item XPUSHs
|
|
X<XPUSHs>
|
|
|
|
Push an SV onto the stack, extending the stack if necessary. Does not
|
|
handle 'set' magic. Does not use C<TARG>. See also C<L</XPUSHmortal>>,
|
|
C<PUSHs> and C<PUSHmortal>.
|
|
|
|
void XPUSHs(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file pp.h
|
|
|
|
=item XPUSHu
|
|
X<XPUSHu>
|
|
|
|
Push an unsigned integer onto the stack, extending the stack if necessary.
|
|
Handles 'set' magic. Uses C<TARG>, so C<dTARGET> or C<dXSTARG> should be
|
|
called to declare it. Do not call multiple C<TARG>-oriented macros to
|
|
return lists from XSUB's - see C<L</mXPUSHu>> instead. See also C<L</PUSHu>> and
|
|
C<L</mPUSHu>>.
|
|
|
|
void XPUSHu(UV uv)
|
|
|
|
=for hackers
|
|
Found in file pp.h
|
|
|
|
=item XSRETURN
|
|
X<XSRETURN>
|
|
|
|
Return from XSUB, indicating number of items on the stack. This is usually
|
|
handled by C<xsubpp>.
|
|
|
|
void XSRETURN(int nitems)
|
|
|
|
=for hackers
|
|
Found in file XSUB.h
|
|
|
|
=item XSRETURN_EMPTY
|
|
X<XSRETURN_EMPTY>
|
|
|
|
Return an empty list from an XSUB immediately.
|
|
|
|
XSRETURN_EMPTY;
|
|
|
|
=for hackers
|
|
Found in file XSUB.h
|
|
|
|
=item XSRETURN_IV
|
|
X<XSRETURN_IV>
|
|
|
|
Return an integer from an XSUB immediately. Uses C<XST_mIV>.
|
|
|
|
void XSRETURN_IV(IV iv)
|
|
|
|
=for hackers
|
|
Found in file XSUB.h
|
|
|
|
=item XSRETURN_NO
|
|
X<XSRETURN_NO>
|
|
|
|
Return C<&PL_sv_no> from an XSUB immediately. Uses C<XST_mNO>.
|
|
|
|
XSRETURN_NO;
|
|
|
|
=for hackers
|
|
Found in file XSUB.h
|
|
|
|
=item XSRETURN_NV
|
|
X<XSRETURN_NV>
|
|
|
|
Return a double from an XSUB immediately. Uses C<XST_mNV>.
|
|
|
|
void XSRETURN_NV(NV nv)
|
|
|
|
=for hackers
|
|
Found in file XSUB.h
|
|
|
|
=item XSRETURN_PV
|
|
X<XSRETURN_PV>
|
|
|
|
Return a copy of a string from an XSUB immediately. Uses C<XST_mPV>.
|
|
|
|
void XSRETURN_PV(char* str)
|
|
|
|
=for hackers
|
|
Found in file XSUB.h
|
|
|
|
=item XSRETURN_UNDEF
|
|
X<XSRETURN_UNDEF>
|
|
|
|
Return C<&PL_sv_undef> from an XSUB immediately. Uses C<XST_mUNDEF>.
|
|
|
|
XSRETURN_UNDEF;
|
|
|
|
=for hackers
|
|
Found in file XSUB.h
|
|
|
|
=item XSRETURN_UV
|
|
X<XSRETURN_UV>
|
|
|
|
Return an integer from an XSUB immediately. Uses C<XST_mUV>.
|
|
|
|
void XSRETURN_UV(IV uv)
|
|
|
|
=for hackers
|
|
Found in file XSUB.h
|
|
|
|
=item XSRETURN_YES
|
|
X<XSRETURN_YES>
|
|
|
|
Return C<&PL_sv_yes> from an XSUB immediately. Uses C<XST_mYES>.
|
|
|
|
XSRETURN_YES;
|
|
|
|
=for hackers
|
|
Found in file XSUB.h
|
|
|
|
=item XST_mIV
|
|
X<XST_mIV>
|
|
|
|
Place an integer into the specified position C<pos> on the stack. The
|
|
value is stored in a new mortal SV.
|
|
|
|
void XST_mIV(int pos, IV iv)
|
|
|
|
=for hackers
|
|
Found in file XSUB.h
|
|
|
|
=item XST_mNO
|
|
X<XST_mNO>
|
|
|
|
Place C<&PL_sv_no> into the specified position C<pos> on the
|
|
stack.
|
|
|
|
void XST_mNO(int pos)
|
|
|
|
=for hackers
|
|
Found in file XSUB.h
|
|
|
|
=item XST_mNV
|
|
X<XST_mNV>
|
|
|
|
Place a double into the specified position C<pos> on the stack. The value
|
|
is stored in a new mortal SV.
|
|
|
|
void XST_mNV(int pos, NV nv)
|
|
|
|
=for hackers
|
|
Found in file XSUB.h
|
|
|
|
=item XST_mPV
|
|
X<XST_mPV>
|
|
|
|
Place a copy of a string into the specified position C<pos> on the stack.
|
|
The value is stored in a new mortal SV.
|
|
|
|
void XST_mPV(int pos, char* str)
|
|
|
|
=for hackers
|
|
Found in file XSUB.h
|
|
|
|
=item XST_mUNDEF
|
|
X<XST_mUNDEF>
|
|
|
|
Place C<&PL_sv_undef> into the specified position C<pos> on the
|
|
stack.
|
|
|
|
void XST_mUNDEF(int pos)
|
|
|
|
=for hackers
|
|
Found in file XSUB.h
|
|
|
|
=item XST_mUV
|
|
X<XST_mUV>
|
|
|
|
Place an unsigned integer into the specified position C<pos> on the stack. The
|
|
value is stored in a new mortal SV.
|
|
|
|
void XST_mUV(int pos, UV uv)
|
|
|
|
=for hackers
|
|
Found in file XSUB.h
|
|
|
|
=item XST_mYES
|
|
X<XST_mYES>
|
|
|
|
Place C<&PL_sv_yes> into the specified position C<pos> on the
|
|
stack.
|
|
|
|
void XST_mYES(int pos)
|
|
|
|
=for hackers
|
|
Found in file XSUB.h
|
|
|
|
|
|
=back
|
|
|
|
=head1 SV Flags
|
|
|
|
=over 8
|
|
|
|
=item SVt_IV
|
|
X<SVt_IV>
|
|
|
|
Type flag for scalars. See L</svtype>.
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SVt_NULL
|
|
X<SVt_NULL>
|
|
|
|
Type flag for scalars. See L</svtype>.
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SVt_NV
|
|
X<SVt_NV>
|
|
|
|
Type flag for scalars. See L</svtype>.
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SVt_PV
|
|
X<SVt_PV>
|
|
|
|
Type flag for scalars. See L</svtype>.
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SVt_PVAV
|
|
X<SVt_PVAV>
|
|
|
|
Type flag for arrays. See L</svtype>.
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SVt_PVCV
|
|
X<SVt_PVCV>
|
|
|
|
Type flag for subroutines. See L</svtype>.
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SVt_PVFM
|
|
X<SVt_PVFM>
|
|
|
|
Type flag for formats. See L</svtype>.
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SVt_PVGV
|
|
X<SVt_PVGV>
|
|
|
|
Type flag for typeglobs. See L</svtype>.
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SVt_PVHV
|
|
X<SVt_PVHV>
|
|
|
|
Type flag for hashes. See L</svtype>.
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SVt_PVIO
|
|
X<SVt_PVIO>
|
|
|
|
Type flag for I/O objects. See L</svtype>.
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SVt_PVIV
|
|
X<SVt_PVIV>
|
|
|
|
Type flag for scalars. See L</svtype>.
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SVt_PVLV
|
|
X<SVt_PVLV>
|
|
|
|
Type flag for scalars. See L</svtype>.
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SVt_PVMG
|
|
X<SVt_PVMG>
|
|
|
|
Type flag for scalars. See L</svtype>.
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SVt_PVNV
|
|
X<SVt_PVNV>
|
|
|
|
Type flag for scalars. See L</svtype>.
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SVt_REGEXP
|
|
X<SVt_REGEXP>
|
|
|
|
Type flag for regular expressions. See L</svtype>.
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item svtype
|
|
X<svtype>
|
|
|
|
An enum of flags for Perl types. These are found in the file F<sv.h>
|
|
in the C<svtype> enum. Test these flags with the C<SvTYPE> macro.
|
|
|
|
The types are:
|
|
|
|
SVt_NULL
|
|
SVt_IV
|
|
SVt_NV
|
|
SVt_RV
|
|
SVt_PV
|
|
SVt_PVIV
|
|
SVt_PVNV
|
|
SVt_PVMG
|
|
SVt_INVLIST
|
|
SVt_REGEXP
|
|
SVt_PVGV
|
|
SVt_PVLV
|
|
SVt_PVAV
|
|
SVt_PVHV
|
|
SVt_PVCV
|
|
SVt_PVFM
|
|
SVt_PVIO
|
|
|
|
These are most easily explained from the bottom up.
|
|
|
|
C<SVt_PVIO> is for I/O objects, C<SVt_PVFM> for formats, C<SVt_PVCV> for
|
|
subroutines, C<SVt_PVHV> for hashes and C<SVt_PVAV> for arrays.
|
|
|
|
All the others are scalar types, that is, things that can be bound to a
|
|
C<$> variable. For these, the internal types are mostly orthogonal to
|
|
types in the Perl language.
|
|
|
|
Hence, checking C<< SvTYPE(sv) < SVt_PVAV >> is the best way to see whether
|
|
something is a scalar.
|
|
|
|
C<SVt_PVGV> represents a typeglob. If C<!SvFAKE(sv)>, then it is a real,
|
|
incoercible typeglob. If C<SvFAKE(sv)>, then it is a scalar to which a
|
|
typeglob has been assigned. Assigning to it again will stop it from being
|
|
a typeglob. C<SVt_PVLV> represents a scalar that delegates to another scalar
|
|
behind the scenes. It is used, e.g., for the return value of C<substr> and
|
|
for tied hash and array elements. It can hold any scalar value, including
|
|
a typeglob. C<SVt_REGEXP> is for regular
|
|
expressions. C<SVt_INVLIST> is for Perl
|
|
core internal use only.
|
|
|
|
C<SVt_PVMG> represents a "normal" scalar (not a typeglob, regular expression,
|
|
or delegate). Since most scalars do not need all the internal fields of a
|
|
PVMG, we save memory by allocating smaller structs when possible. All the
|
|
other types are just simpler forms of C<SVt_PVMG>, with fewer internal fields.
|
|
C<SVt_NULL> can only hold undef. C<SVt_IV> can hold undef, an integer, or a
|
|
reference. (C<SVt_RV> is an alias for C<SVt_IV>, which exists for backward
|
|
compatibility.) C<SVt_NV> can hold any of those or a double. C<SVt_PV> can only
|
|
hold C<undef> or a string. C<SVt_PVIV> is a superset of C<SVt_PV> and C<SVt_IV>.
|
|
C<SVt_PVNV> is similar. C<SVt_PVMG> can hold anything C<SVt_PVNV> can hold, but it
|
|
can, but does not have to, be blessed or magical.
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
|
|
=back
|
|
|
|
=head1 SV Manipulation Functions
|
|
|
|
=over 8
|
|
|
|
=item boolSV
|
|
X<boolSV>
|
|
|
|
Returns a true SV if C<b> is a true value, or a false SV if C<b> is 0.
|
|
|
|
See also C<L</PL_sv_yes>> and C<L</PL_sv_no>>.
|
|
|
|
SV * boolSV(bool b)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item croak_xs_usage
|
|
X<croak_xs_usage>
|
|
|
|
A specialised variant of C<croak()> for emitting the usage message for xsubs
|
|
|
|
croak_xs_usage(cv, "eee_yow");
|
|
|
|
works out the package name and subroutine name from C<cv>, and then calls
|
|
C<croak()>. Hence if C<cv> is C<&ouch::awk>, it would call C<croak> as:
|
|
|
|
Perl_croak(aTHX_ "Usage: %" SVf "::%" SVf "(%s)", "ouch" "awk",
|
|
"eee_yow");
|
|
|
|
void croak_xs_usage(const CV *const cv,
|
|
const char *const params)
|
|
|
|
=for hackers
|
|
Found in file universal.c
|
|
|
|
=item get_sv
|
|
X<get_sv>
|
|
|
|
Returns the SV of the specified Perl scalar. C<flags> are passed to
|
|
C<gv_fetchpv>. If C<GV_ADD> is set and the
|
|
Perl variable does not exist then it will be created. If C<flags> is zero
|
|
and the variable does not exist then NULL is returned.
|
|
|
|
NOTE: the perl_ form of this function is deprecated.
|
|
|
|
SV* get_sv(const char *name, I32 flags)
|
|
|
|
=for hackers
|
|
Found in file perl.c
|
|
|
|
=item looks_like_number
|
|
X<looks_like_number>
|
|
|
|
Test if the content of an SV looks like a number (or is a number).
|
|
C<Inf> and C<Infinity> are treated as numbers (so will not issue a
|
|
non-numeric warning), even if your C<atof()> doesn't grok them. Get-magic is
|
|
ignored.
|
|
|
|
I32 looks_like_number(SV *const sv)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item newRV_inc
|
|
X<newRV_inc>
|
|
|
|
Creates an RV wrapper for an SV. The reference count for the original SV is
|
|
incremented.
|
|
|
|
SV* newRV_inc(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item newRV_noinc
|
|
X<newRV_noinc>
|
|
|
|
Creates an RV wrapper for an SV. The reference count for the original
|
|
SV is B<not> incremented.
|
|
|
|
SV* newRV_noinc(SV *const tmpRef)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item newSV
|
|
X<newSV>
|
|
|
|
Creates a new SV. A non-zero C<len> parameter indicates the number of
|
|
bytes of preallocated string space the SV should have. An extra byte for a
|
|
trailing C<NUL> is also reserved. (C<SvPOK> is not set for the SV even if string
|
|
space is allocated.) The reference count for the new SV is set to 1.
|
|
|
|
In 5.9.3, C<newSV()> replaces the older C<NEWSV()> API, and drops the first
|
|
parameter, I<x>, a debug aid which allowed callers to identify themselves.
|
|
This aid has been superseded by a new build option, C<PERL_MEM_LOG> (see
|
|
L<perlhacktips/PERL_MEM_LOG>). The older API is still there for use in XS
|
|
modules supporting older perls.
|
|
|
|
SV* newSV(const STRLEN len)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item newSVhek
|
|
X<newSVhek>
|
|
|
|
Creates a new SV from the hash key structure. It will generate scalars that
|
|
point to the shared string table where possible. Returns a new (undefined)
|
|
SV if C<hek> is NULL.
|
|
|
|
SV* newSVhek(const HEK *const hek)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item newSViv
|
|
X<newSViv>
|
|
|
|
Creates a new SV and copies an integer into it. The reference count for the
|
|
SV is set to 1.
|
|
|
|
SV* newSViv(const IV i)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item newSVnv
|
|
X<newSVnv>
|
|
|
|
Creates a new SV and copies a floating point value into it.
|
|
The reference count for the SV is set to 1.
|
|
|
|
SV* newSVnv(const NV n)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item newSVpadname
|
|
X<newSVpadname>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Creates a new SV containing the pad name.
|
|
|
|
SV* newSVpadname(PADNAME *pn)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item newSVpv
|
|
X<newSVpv>
|
|
|
|
Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
|
|
characters) into it. The reference count for the
|
|
SV is set to 1. If C<len> is zero, Perl will compute the length using
|
|
C<strlen()>, (which means if you use this option, that C<s> can't have embedded
|
|
C<NUL> characters and has to have a terminating C<NUL> byte).
|
|
|
|
This function can cause reliability issues if you are likely to pass in
|
|
empty strings that are not null terminated, because it will run
|
|
strlen on the string and potentially run past valid memory.
|
|
|
|
Using L</newSVpvn> is a safer alternative for non C<NUL> terminated strings.
|
|
For string literals use L</newSVpvs> instead. This function will work fine for
|
|
C<NUL> terminated strings, but if you want to avoid the if statement on whether
|
|
to call C<strlen> use C<newSVpvn> instead (calling C<strlen> yourself).
|
|
|
|
SV* newSVpv(const char *const s, const STRLEN len)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item newSVpvf
|
|
X<newSVpvf>
|
|
|
|
Creates a new SV and initializes it with the string formatted like
|
|
C<sv_catpvf>.
|
|
|
|
SV* newSVpvf(const char *const pat, ...)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item newSVpvn
|
|
X<newSVpvn>
|
|
|
|
Creates a new SV and copies a string into it, which may contain C<NUL> characters
|
|
(C<\0>) and other binary data. The reference count for the SV is set to 1.
|
|
Note that if C<len> is zero, Perl will create a zero length (Perl) string. You
|
|
are responsible for ensuring that the source buffer is at least
|
|
C<len> bytes long. If the C<buffer> argument is NULL the new SV will be
|
|
undefined.
|
|
|
|
SV* newSVpvn(const char *const buffer,
|
|
const STRLEN len)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item newSVpvn_flags
|
|
X<newSVpvn_flags>
|
|
|
|
Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
|
|
characters) into it. The reference count for the
|
|
SV is set to 1. Note that if C<len> is zero, Perl will create a zero length
|
|
string. You are responsible for ensuring that the source string is at least
|
|
C<len> bytes long. If the C<s> argument is NULL the new SV will be undefined.
|
|
Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
|
|
If C<SVs_TEMP> is set, then C<sv_2mortal()> is called on the result before
|
|
returning. If C<SVf_UTF8> is set, C<s>
|
|
is considered to be in UTF-8 and the
|
|
C<SVf_UTF8> flag will be set on the new SV.
|
|
C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
|
|
|
|
#define newSVpvn_utf8(s, len, u) \
|
|
newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
|
|
|
|
SV* newSVpvn_flags(const char *const s,
|
|
const STRLEN len,
|
|
const U32 flags)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item newSVpvn_share
|
|
X<newSVpvn_share>
|
|
|
|
Creates a new SV with its C<SvPVX_const> pointing to a shared string in the string
|
|
table. If the string does not already exist in the table, it is
|
|
created first. Turns on the C<SvIsCOW> flag (or C<READONLY>
|
|
and C<FAKE> in 5.16 and earlier). If the C<hash> parameter
|
|
is non-zero, that value is used; otherwise the hash is computed.
|
|
The string's hash can later be retrieved from the SV
|
|
with the C<SvSHARED_HASH()> macro. The idea here is
|
|
that as the string table is used for shared hash keys these strings will have
|
|
C<SvPVX_const == HeKEY> and hash lookup will avoid string compare.
|
|
|
|
SV* newSVpvn_share(const char* s, I32 len, U32 hash)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item newSVpvn_utf8
|
|
X<newSVpvn_utf8>
|
|
|
|
Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
|
|
characters) into it. If C<utf8> is true, calls
|
|
C<SvUTF8_on> on the new SV. Implemented as a wrapper around C<newSVpvn_flags>.
|
|
|
|
SV* newSVpvn_utf8(const char* s, STRLEN len,
|
|
U32 utf8)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item newSVpvs
|
|
X<newSVpvs>
|
|
|
|
Like C<newSVpvn>, but takes a literal string instead of a
|
|
string/length pair.
|
|
|
|
SV* newSVpvs("literal string")
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item newSVpvs_flags
|
|
X<newSVpvs_flags>
|
|
|
|
Like C<newSVpvn_flags>, but takes a literal string instead of
|
|
a string/length pair.
|
|
|
|
SV* newSVpvs_flags("literal string", U32 flags)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item newSVpv_share
|
|
X<newSVpv_share>
|
|
|
|
Like C<newSVpvn_share>, but takes a C<NUL>-terminated string instead of a
|
|
string/length pair.
|
|
|
|
SV* newSVpv_share(const char* s, U32 hash)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item newSVpvs_share
|
|
X<newSVpvs_share>
|
|
|
|
Like C<newSVpvn_share>, but takes a literal string instead of
|
|
a string/length pair and omits the hash parameter.
|
|
|
|
SV* newSVpvs_share("literal string")
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item newSVrv
|
|
X<newSVrv>
|
|
|
|
Creates a new SV for the existing RV, C<rv>, to point to. If C<rv> is not an
|
|
RV then it will be upgraded to one. If C<classname> is non-null then the new
|
|
SV will be blessed in the specified package. The new SV is returned and its
|
|
reference count is 1. The reference count 1 is owned by C<rv>. See also
|
|
newRV_inc() and newRV_noinc() for creating a new RV properly.
|
|
|
|
SV* newSVrv(SV *const rv,
|
|
const char *const classname)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item newSVsv
|
|
X<newSVsv>
|
|
|
|
Creates a new SV which is an exact duplicate of the original SV.
|
|
(Uses C<sv_setsv>.)
|
|
|
|
SV* newSVsv(SV *const old)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item newSVsv_nomg
|
|
X<newSVsv_nomg>
|
|
|
|
Like C<newSVsv> but does not process get magic.
|
|
|
|
SV* newSVsv_nomg(SV *const old)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item newSV_type
|
|
X<newSV_type>
|
|
|
|
Creates a new SV, of the type specified. The reference count for the new SV
|
|
is set to 1.
|
|
|
|
SV* newSV_type(const svtype type)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item newSVuv
|
|
X<newSVuv>
|
|
|
|
Creates a new SV and copies an unsigned integer into it.
|
|
The reference count for the SV is set to 1.
|
|
|
|
SV* newSVuv(const UV u)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sortsv_flags
|
|
X<sortsv_flags>
|
|
|
|
In-place sort an array of SV pointers with the given comparison routine,
|
|
with various SORTf_* flag options.
|
|
|
|
void sortsv_flags(SV** array, size_t num_elts,
|
|
SVCOMPARE_t cmp, U32 flags)
|
|
|
|
=for hackers
|
|
Found in file pp_sort.c
|
|
|
|
=item sv_2bool
|
|
X<sv_2bool>
|
|
|
|
This macro is only used by C<sv_true()> or its macro equivalent, and only if
|
|
the latter's argument is neither C<SvPOK>, C<SvIOK> nor C<SvNOK>.
|
|
It calls C<sv_2bool_flags> with the C<SV_GMAGIC> flag.
|
|
|
|
bool sv_2bool(SV *const sv)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_2bool_flags
|
|
X<sv_2bool_flags>
|
|
|
|
This function is only used by C<sv_true()> and friends, and only if
|
|
the latter's argument is neither C<SvPOK>, C<SvIOK> nor C<SvNOK>. If the flags
|
|
contain C<SV_GMAGIC>, then it does an C<mg_get()> first.
|
|
|
|
|
|
bool sv_2bool_flags(SV *sv, I32 flags)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_2cv
|
|
X<sv_2cv>
|
|
|
|
Using various gambits, try to get a CV from an SV; in addition, try if
|
|
possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
|
|
The flags in C<lref> are passed to C<gv_fetchsv>.
|
|
|
|
CV* sv_2cv(SV* sv, HV **const st, GV **const gvp,
|
|
const I32 lref)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_2io
|
|
X<sv_2io>
|
|
|
|
Using various gambits, try to get an IO from an SV: the IO slot if its a
|
|
GV; or the recursive result if we're an RV; or the IO slot of the symbol
|
|
named after the PV if we're a string.
|
|
|
|
'Get' magic is ignored on the C<sv> passed in, but will be called on
|
|
C<SvRV(sv)> if C<sv> is an RV.
|
|
|
|
IO* sv_2io(SV *const sv)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_2iv_flags
|
|
X<sv_2iv_flags>
|
|
|
|
Return the integer value of an SV, doing any necessary string
|
|
conversion. If C<flags> has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.
|
|
Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
|
|
|
|
IV sv_2iv_flags(SV *const sv, const I32 flags)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_2mortal
|
|
X<sv_2mortal>
|
|
|
|
Marks an existing SV as mortal. The SV will be destroyed "soon", either
|
|
by an explicit call to C<FREETMPS>, or by an implicit call at places such as
|
|
statement boundaries. C<SvTEMP()> is turned on which means that the SV's
|
|
string buffer can be "stolen" if this SV is copied. See also
|
|
C<L</sv_newmortal>> and C<L</sv_mortalcopy>>.
|
|
|
|
SV* sv_2mortal(SV *const sv)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_2nv_flags
|
|
X<sv_2nv_flags>
|
|
|
|
Return the num value of an SV, doing any necessary string or integer
|
|
conversion. If C<flags> has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.
|
|
Normally used via the C<SvNV(sv)> and C<SvNVx(sv)> macros.
|
|
|
|
NV sv_2nv_flags(SV *const sv, const I32 flags)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_2pvbyte
|
|
X<sv_2pvbyte>
|
|
|
|
Return a pointer to the byte-encoded representation of the SV, and set C<*lp>
|
|
to its length. If the SV is marked as being encoded as UTF-8, it will
|
|
downgrade it to a byte string as a side-effect, if possible. If the SV cannot
|
|
be downgraded, this croaks.
|
|
|
|
Usually accessed via the C<SvPVbyte> macro.
|
|
|
|
char* sv_2pvbyte(SV *sv, STRLEN *const lp)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_2pvutf8
|
|
X<sv_2pvutf8>
|
|
|
|
Return a pointer to the UTF-8-encoded representation of the SV, and set C<*lp>
|
|
to its length. May cause the SV to be upgraded to UTF-8 as a side-effect.
|
|
|
|
Usually accessed via the C<SvPVutf8> macro.
|
|
|
|
char* sv_2pvutf8(SV *sv, STRLEN *const lp)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_2pv_flags
|
|
X<sv_2pv_flags>
|
|
|
|
Returns a pointer to the string value of an SV, and sets C<*lp> to its length.
|
|
If flags has the C<SV_GMAGIC> bit set, does an C<mg_get()> first. Coerces C<sv> to a
|
|
string if necessary. Normally invoked via the C<SvPV_flags> macro.
|
|
C<sv_2pv()> and C<sv_2pv_nomg> usually end up here too.
|
|
|
|
char* sv_2pv_flags(SV *const sv, STRLEN *const lp,
|
|
const I32 flags)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_2uv_flags
|
|
X<sv_2uv_flags>
|
|
|
|
Return the unsigned integer value of an SV, doing any necessary string
|
|
conversion. If C<flags> has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.
|
|
Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
|
|
|
|
UV sv_2uv_flags(SV *const sv, const I32 flags)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_backoff
|
|
X<sv_backoff>
|
|
|
|
Remove any string offset. You should normally use the C<SvOOK_off> macro
|
|
wrapper instead.
|
|
|
|
void sv_backoff(SV *const sv)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_bless
|
|
X<sv_bless>
|
|
|
|
Blesses an SV into a specified package. The SV must be an RV. The package
|
|
must be designated by its stash (see C<L</gv_stashpv>>). The reference count
|
|
of the SV is unaffected.
|
|
|
|
SV* sv_bless(SV *const sv, HV *const stash)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_catpv
|
|
X<sv_catpv>
|
|
|
|
Concatenates the C<NUL>-terminated string onto the end of the string which is
|
|
in the SV.
|
|
If the SV has the UTF-8 status set, then the bytes appended should be
|
|
valid UTF-8. Handles 'get' magic, but not 'set' magic. See
|
|
C<L</sv_catpv_mg>>.
|
|
|
|
void sv_catpv(SV *const sv, const char* ptr)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_catpvf
|
|
X<sv_catpvf>
|
|
|
|
Processes its arguments like C<sprintf>, and appends the formatted
|
|
output to an SV. As with C<sv_vcatpvfn> called with a non-null C-style
|
|
variable argument list, argument reordering is not supported.
|
|
If the appended data contains "wide" characters
|
|
(including, but not limited to, SVs with a UTF-8 PV formatted with C<%s>,
|
|
and characters >255 formatted with C<%c>), the original SV might get
|
|
upgraded to UTF-8. Handles 'get' magic, but not 'set' magic. See
|
|
C<L</sv_catpvf_mg>>. If the original SV was UTF-8, the pattern should be
|
|
valid UTF-8; if the original SV was bytes, the pattern should be too.
|
|
|
|
void sv_catpvf(SV *const sv, const char *const pat,
|
|
...)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_catpvf_mg
|
|
X<sv_catpvf_mg>
|
|
|
|
Like C<sv_catpvf>, but also handles 'set' magic.
|
|
|
|
void sv_catpvf_mg(SV *const sv,
|
|
const char *const pat, ...)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_catpvn
|
|
X<sv_catpvn>
|
|
|
|
Concatenates the string onto the end of the string which is in the SV.
|
|
C<len> indicates number of bytes to copy. If the SV has the UTF-8
|
|
status set, then the bytes appended should be valid UTF-8.
|
|
Handles 'get' magic, but not 'set' magic. See C<L</sv_catpvn_mg>>.
|
|
|
|
void sv_catpvn(SV *dsv, const char *sstr, STRLEN len)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_catpvn_flags
|
|
X<sv_catpvn_flags>
|
|
|
|
Concatenates the string onto the end of the string which is in the SV. The
|
|
C<len> indicates number of bytes to copy.
|
|
|
|
By default, the string appended is assumed to be valid UTF-8 if the SV has
|
|
the UTF-8 status set, and a string of bytes otherwise. One can force the
|
|
appended string to be interpreted as UTF-8 by supplying the C<SV_CATUTF8>
|
|
flag, and as bytes by supplying the C<SV_CATBYTES> flag; the SV or the
|
|
string appended will be upgraded to UTF-8 if necessary.
|
|
|
|
If C<flags> has the C<SV_SMAGIC> bit set, will
|
|
C<mg_set> on C<dsv> afterwards if appropriate.
|
|
C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
|
|
in terms of this function.
|
|
|
|
void sv_catpvn_flags(SV *const dstr,
|
|
const char *sstr,
|
|
const STRLEN len,
|
|
const I32 flags)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_catpvn_nomg
|
|
X<sv_catpvn_nomg>
|
|
|
|
Like C<sv_catpvn> but doesn't process magic.
|
|
|
|
void sv_catpvn_nomg(SV* sv, const char* ptr,
|
|
STRLEN len)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item sv_catpvs
|
|
X<sv_catpvs>
|
|
|
|
Like C<sv_catpvn>, but takes a literal string instead of a
|
|
string/length pair.
|
|
|
|
void sv_catpvs(SV* sv, "literal string")
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item sv_catpvs_flags
|
|
X<sv_catpvs_flags>
|
|
|
|
Like C<sv_catpvn_flags>, but takes a literal string instead
|
|
of a string/length pair.
|
|
|
|
void sv_catpvs_flags(SV* sv, "literal string",
|
|
I32 flags)
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item sv_catpvs_mg
|
|
X<sv_catpvs_mg>
|
|
|
|
Like C<sv_catpvn_mg>, but takes a literal string instead of a
|
|
string/length pair.
|
|
|
|
void sv_catpvs_mg(SV* sv, "literal string")
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item sv_catpvs_nomg
|
|
X<sv_catpvs_nomg>
|
|
|
|
Like C<sv_catpvn_nomg>, but takes a literal string instead of
|
|
a string/length pair.
|
|
|
|
void sv_catpvs_nomg(SV* sv, "literal string")
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item sv_catpv_flags
|
|
X<sv_catpv_flags>
|
|
|
|
Concatenates the C<NUL>-terminated string onto the end of the string which is
|
|
in the SV.
|
|
If the SV has the UTF-8 status set, then the bytes appended should
|
|
be valid UTF-8. If C<flags> has the C<SV_SMAGIC> bit set, will C<mg_set>
|
|
on the modified SV if appropriate.
|
|
|
|
void sv_catpv_flags(SV *dstr, const char *sstr,
|
|
const I32 flags)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_catpv_mg
|
|
X<sv_catpv_mg>
|
|
|
|
Like C<sv_catpv>, but also handles 'set' magic.
|
|
|
|
void sv_catpv_mg(SV *const sv, const char *const ptr)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_catpv_nomg
|
|
X<sv_catpv_nomg>
|
|
|
|
Like C<sv_catpv> but doesn't process magic.
|
|
|
|
void sv_catpv_nomg(SV* sv, const char* ptr)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item sv_catsv
|
|
X<sv_catsv>
|
|
|
|
Concatenates the string from SV C<ssv> onto the end of the string in SV
|
|
C<dsv>. If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
|
|
Handles 'get' magic on both SVs, but no 'set' magic. See C<L</sv_catsv_mg>>
|
|
and C<L</sv_catsv_nomg>>.
|
|
|
|
void sv_catsv(SV *dstr, SV *sstr)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_catsv_flags
|
|
X<sv_catsv_flags>
|
|
|
|
Concatenates the string from SV C<ssv> onto the end of the string in SV
|
|
C<dsv>. If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
|
|
If C<flags> has the C<SV_GMAGIC> bit set, will call C<mg_get> on both SVs if
|
|
appropriate. If C<flags> has the C<SV_SMAGIC> bit set, C<mg_set> will be called on
|
|
the modified SV afterward, if appropriate. C<sv_catsv>, C<sv_catsv_nomg>,
|
|
and C<sv_catsv_mg> are implemented in terms of this function.
|
|
|
|
void sv_catsv_flags(SV *const dsv, SV *const ssv,
|
|
const I32 flags)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_catsv_nomg
|
|
X<sv_catsv_nomg>
|
|
|
|
Like C<sv_catsv> but doesn't process magic.
|
|
|
|
void sv_catsv_nomg(SV* dsv, SV* ssv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item sv_chop
|
|
X<sv_chop>
|
|
|
|
Efficient removal of characters from the beginning of the string buffer.
|
|
C<SvPOK(sv)>, or at least C<SvPOKp(sv)>, must be true and C<ptr> must be a
|
|
pointer to somewhere inside the string buffer. C<ptr> becomes the first
|
|
character of the adjusted string. Uses the C<OOK> hack. On return, only
|
|
C<SvPOK(sv)> and C<SvPOKp(sv)> among the C<OK> flags will be true.
|
|
|
|
Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
|
|
refer to the same chunk of data.
|
|
|
|
The unfortunate similarity of this function's name to that of Perl's C<chop>
|
|
operator is strictly coincidental. This function works from the left;
|
|
C<chop> works from the right.
|
|
|
|
void sv_chop(SV *const sv, const char *const ptr)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_clear
|
|
X<sv_clear>
|
|
|
|
Clear an SV: call any destructors, free up any memory used by the body,
|
|
and free the body itself. The SV's head is I<not> freed, although
|
|
its type is set to all 1's so that it won't inadvertently be assumed
|
|
to be live during global destruction etc.
|
|
This function should only be called when C<REFCNT> is zero. Most of the time
|
|
you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
|
|
instead.
|
|
|
|
void sv_clear(SV *const orig_sv)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_cmp
|
|
X<sv_cmp>
|
|
|
|
Compares the strings in two SVs. Returns -1, 0, or 1 indicating whether the
|
|
string in C<sv1> is less than, equal to, or greater than the string in
|
|
C<sv2>. Is UTF-8 and S<C<'use bytes'>> aware, handles get magic, and will
|
|
coerce its args to strings if necessary. See also C<L</sv_cmp_locale>>.
|
|
|
|
I32 sv_cmp(SV *const sv1, SV *const sv2)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_cmp_flags
|
|
X<sv_cmp_flags>
|
|
|
|
Compares the strings in two SVs. Returns -1, 0, or 1 indicating whether the
|
|
string in C<sv1> is less than, equal to, or greater than the string in
|
|
C<sv2>. Is UTF-8 and S<C<'use bytes'>> aware and will coerce its args to strings
|
|
if necessary. If the flags has the C<SV_GMAGIC> bit set, it handles get magic. See
|
|
also C<L</sv_cmp_locale_flags>>.
|
|
|
|
I32 sv_cmp_flags(SV *const sv1, SV *const sv2,
|
|
const U32 flags)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_cmp_locale
|
|
X<sv_cmp_locale>
|
|
|
|
Compares the strings in two SVs in a locale-aware manner. Is UTF-8 and
|
|
S<C<'use bytes'>> aware, handles get magic, and will coerce its args to strings
|
|
if necessary. See also C<L</sv_cmp>>.
|
|
|
|
I32 sv_cmp_locale(SV *const sv1, SV *const sv2)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_cmp_locale_flags
|
|
X<sv_cmp_locale_flags>
|
|
|
|
Compares the strings in two SVs in a locale-aware manner. Is UTF-8 and
|
|
S<C<'use bytes'>> aware and will coerce its args to strings if necessary. If
|
|
the flags contain C<SV_GMAGIC>, it handles get magic. See also
|
|
C<L</sv_cmp_flags>>.
|
|
|
|
I32 sv_cmp_locale_flags(SV *const sv1,
|
|
SV *const sv2,
|
|
const U32 flags)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_collxfrm
|
|
X<sv_collxfrm>
|
|
|
|
This calls C<sv_collxfrm_flags> with the SV_GMAGIC flag. See
|
|
C<L</sv_collxfrm_flags>>.
|
|
|
|
char* sv_collxfrm(SV *const sv, STRLEN *const nxp)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_collxfrm_flags
|
|
X<sv_collxfrm_flags>
|
|
|
|
Add Collate Transform magic to an SV if it doesn't already have it. If the
|
|
flags contain C<SV_GMAGIC>, it handles get-magic.
|
|
|
|
Any scalar variable may carry C<PERL_MAGIC_collxfrm> magic that contains the
|
|
scalar data of the variable, but transformed to such a format that a normal
|
|
memory comparison can be used to compare the data according to the locale
|
|
settings.
|
|
|
|
char* sv_collxfrm_flags(SV *const sv,
|
|
STRLEN *const nxp,
|
|
I32 const flags)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_copypv
|
|
X<sv_copypv>
|
|
|
|
Copies a stringified representation of the source SV into the
|
|
destination SV. Automatically performs any necessary C<mg_get> and
|
|
coercion of numeric values into strings. Guaranteed to preserve
|
|
C<UTF8> flag even from overloaded objects. Similar in nature to
|
|
C<sv_2pv[_flags]> but operates directly on an SV instead of just the
|
|
string. Mostly uses C<sv_2pv_flags> to do its work, except when that
|
|
would lose the UTF-8'ness of the PV.
|
|
|
|
void sv_copypv(SV *const dsv, SV *const ssv)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_copypv_flags
|
|
X<sv_copypv_flags>
|
|
|
|
Implementation of C<sv_copypv> and C<sv_copypv_nomg>. Calls get magic iff flags
|
|
has the C<SV_GMAGIC> bit set.
|
|
|
|
void sv_copypv_flags(SV *const dsv, SV *const ssv,
|
|
const I32 flags)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_copypv_nomg
|
|
X<sv_copypv_nomg>
|
|
|
|
Like C<sv_copypv>, but doesn't invoke get magic first.
|
|
|
|
void sv_copypv_nomg(SV *const dsv, SV *const ssv)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item SvCUR
|
|
X<SvCUR>
|
|
|
|
Returns the length of the string which is in the SV. See C<L</SvLEN>>.
|
|
|
|
STRLEN SvCUR(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvCUR_set
|
|
X<SvCUR_set>
|
|
|
|
Set the current length of the string which is in the SV. See C<L</SvCUR>>
|
|
and C<SvIV_set>>.
|
|
|
|
void SvCUR_set(SV* sv, STRLEN len)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item sv_dec
|
|
X<sv_dec>
|
|
|
|
Auto-decrement of the value in the SV, doing string to numeric conversion
|
|
if necessary. Handles 'get' magic and operator overloading.
|
|
|
|
void sv_dec(SV *const sv)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_dec_nomg
|
|
X<sv_dec_nomg>
|
|
|
|
Auto-decrement of the value in the SV, doing string to numeric conversion
|
|
if necessary. Handles operator overloading. Skips handling 'get' magic.
|
|
|
|
void sv_dec_nomg(SV *const sv)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_derived_from
|
|
X<sv_derived_from>
|
|
|
|
Exactly like L</sv_derived_from_pv>, but doesn't take a C<flags> parameter.
|
|
|
|
bool sv_derived_from(SV* sv, const char *const name)
|
|
|
|
=for hackers
|
|
Found in file universal.c
|
|
|
|
=item sv_derived_from_pv
|
|
X<sv_derived_from_pv>
|
|
|
|
Exactly like L</sv_derived_from_pvn>, but takes a nul-terminated string
|
|
instead of a string/length pair.
|
|
|
|
bool sv_derived_from_pv(SV* sv,
|
|
const char *const name,
|
|
U32 flags)
|
|
|
|
=for hackers
|
|
Found in file universal.c
|
|
|
|
=item sv_derived_from_pvn
|
|
X<sv_derived_from_pvn>
|
|
|
|
Returns a boolean indicating whether the SV is derived from the specified class
|
|
I<at the C level>. To check derivation at the Perl level, call C<isa()> as a
|
|
normal Perl method.
|
|
|
|
Currently, the only significant value for C<flags> is SVf_UTF8.
|
|
|
|
bool sv_derived_from_pvn(SV* sv,
|
|
const char *const name,
|
|
const STRLEN len, U32 flags)
|
|
|
|
=for hackers
|
|
Found in file universal.c
|
|
|
|
=item sv_derived_from_sv
|
|
X<sv_derived_from_sv>
|
|
|
|
Exactly like L</sv_derived_from_pvn>, but takes the name string in the form
|
|
of an SV instead of a string/length pair. This is the advised form.
|
|
|
|
bool sv_derived_from_sv(SV* sv, SV *namesv,
|
|
U32 flags)
|
|
|
|
=for hackers
|
|
Found in file universal.c
|
|
|
|
=item sv_does
|
|
X<sv_does>
|
|
|
|
Like L</sv_does_pv>, but doesn't take a C<flags> parameter.
|
|
|
|
bool sv_does(SV* sv, const char *const name)
|
|
|
|
=for hackers
|
|
Found in file universal.c
|
|
|
|
=item sv_does_pv
|
|
X<sv_does_pv>
|
|
|
|
Like L</sv_does_sv>, but takes a nul-terminated string instead of an SV.
|
|
|
|
bool sv_does_pv(SV* sv, const char *const name,
|
|
U32 flags)
|
|
|
|
=for hackers
|
|
Found in file universal.c
|
|
|
|
=item sv_does_pvn
|
|
X<sv_does_pvn>
|
|
|
|
Like L</sv_does_sv>, but takes a string/length pair instead of an SV.
|
|
|
|
bool sv_does_pvn(SV* sv, const char *const name,
|
|
const STRLEN len, U32 flags)
|
|
|
|
=for hackers
|
|
Found in file universal.c
|
|
|
|
=item sv_does_sv
|
|
X<sv_does_sv>
|
|
|
|
Returns a boolean indicating whether the SV performs a specific, named role.
|
|
The SV can be a Perl object or the name of a Perl class.
|
|
|
|
bool sv_does_sv(SV* sv, SV* namesv, U32 flags)
|
|
|
|
=for hackers
|
|
Found in file universal.c
|
|
|
|
=item SvEND
|
|
X<SvEND>
|
|
|
|
Returns a pointer to the spot just after the last character in
|
|
the string which is in the SV, where there is usually a trailing
|
|
C<NUL> character (even though Perl scalars do not strictly require it).
|
|
See C<L</SvCUR>>. Access the character as C<*(SvEND(sv))>.
|
|
|
|
Warning: If C<SvCUR> is equal to C<SvLEN>, then C<SvEND> points to
|
|
unallocated memory.
|
|
|
|
char* SvEND(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item sv_eq
|
|
X<sv_eq>
|
|
|
|
Returns a boolean indicating whether the strings in the two SVs are
|
|
identical. Is UTF-8 and S<C<'use bytes'>> aware, handles get magic, and will
|
|
coerce its args to strings if necessary.
|
|
|
|
I32 sv_eq(SV* sv1, SV* sv2)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_eq_flags
|
|
X<sv_eq_flags>
|
|
|
|
Returns a boolean indicating whether the strings in the two SVs are
|
|
identical. Is UTF-8 and S<C<'use bytes'>> aware and coerces its args to strings
|
|
if necessary. If the flags has the C<SV_GMAGIC> bit set, it handles get-magic, too.
|
|
|
|
I32 sv_eq_flags(SV* sv1, SV* sv2, const U32 flags)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_force_normal_flags
|
|
X<sv_force_normal_flags>
|
|
|
|
Undo various types of fakery on an SV, where fakery means
|
|
"more than" a string: if the PV is a shared string, make
|
|
a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
|
|
an C<xpvmg>; if we're a copy-on-write scalar, this is the on-write time when
|
|
we do the copy, and is also used locally; if this is a
|
|
vstring, drop the vstring magic. If C<SV_COW_DROP_PV> is set
|
|
then a copy-on-write scalar drops its PV buffer (if any) and becomes
|
|
C<SvPOK_off> rather than making a copy. (Used where this
|
|
scalar is about to be set to some other value.) In addition,
|
|
the C<flags> parameter gets passed to C<sv_unref_flags()>
|
|
when unreffing. C<sv_force_normal> calls this function
|
|
with flags set to 0.
|
|
|
|
This function is expected to be used to signal to perl that this SV is
|
|
about to be written to, and any extra book-keeping needs to be taken care
|
|
of. Hence, it croaks on read-only values.
|
|
|
|
void sv_force_normal_flags(SV *const sv,
|
|
const U32 flags)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_free
|
|
X<sv_free>
|
|
|
|
Decrement an SV's reference count, and if it drops to zero, call
|
|
C<sv_clear> to invoke destructors and free up any memory used by
|
|
the body; finally, deallocating the SV's head itself.
|
|
Normally called via a wrapper macro C<SvREFCNT_dec>.
|
|
|
|
void sv_free(SV *const sv)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item SvGAMAGIC
|
|
X<SvGAMAGIC>
|
|
|
|
Returns true if the SV has get magic or
|
|
overloading. If either is true then
|
|
the scalar is active data, and has the potential to return a new value every
|
|
time it is accessed. Hence you must be careful to
|
|
only read it once per user logical operation and work
|
|
with that returned value. If neither is true then
|
|
the scalar's value cannot change unless written to.
|
|
|
|
U32 SvGAMAGIC(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item sv_gets
|
|
X<sv_gets>
|
|
|
|
Get a line from the filehandle and store it into the SV, optionally
|
|
appending to the currently-stored string. If C<append> is not 0, the
|
|
line is appended to the SV instead of overwriting it. C<append> should
|
|
be set to the byte offset that the appended string should start at
|
|
in the SV (typically, C<SvCUR(sv)> is a suitable choice).
|
|
|
|
char* sv_gets(SV *const sv, PerlIO *const fp,
|
|
I32 append)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_get_backrefs
|
|
X<sv_get_backrefs>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
If C<sv> is the target of a weak reference then it returns the back
|
|
references structure associated with the sv; otherwise return C<NULL>.
|
|
|
|
When returning a non-null result the type of the return is relevant. If it
|
|
is an AV then the elements of the AV are the weak reference RVs which
|
|
point at this item. If it is any other type then the item itself is the
|
|
weak reference.
|
|
|
|
See also C<Perl_sv_add_backref()>, C<Perl_sv_del_backref()>,
|
|
C<Perl_sv_kill_backrefs()>
|
|
|
|
SV* sv_get_backrefs(SV *const sv)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item SvGROW
|
|
X<SvGROW>
|
|
|
|
Expands the character buffer in the SV so that it has room for the
|
|
indicated number of bytes (remember to reserve space for an extra trailing
|
|
C<NUL> character). Calls C<sv_grow> to perform the expansion if necessary.
|
|
Returns a pointer to the character
|
|
buffer. SV must be of type >= C<SVt_PV>. One
|
|
alternative is to call C<sv_grow> if you are not sure of the type of SV.
|
|
|
|
You might mistakenly think that C<len> is the number of bytes to add to the
|
|
existing size, but instead it is the total size C<sv> should be.
|
|
|
|
char * SvGROW(SV* sv, STRLEN len)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item sv_grow
|
|
X<sv_grow>
|
|
|
|
Expands the character buffer in the SV. If necessary, uses C<sv_unref> and
|
|
upgrades the SV to C<SVt_PV>. Returns a pointer to the character buffer.
|
|
Use the C<SvGROW> wrapper instead.
|
|
|
|
char* sv_grow(SV *const sv, STRLEN newlen)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_inc
|
|
X<sv_inc>
|
|
|
|
Auto-increment of the value in the SV, doing string to numeric conversion
|
|
if necessary. Handles 'get' magic and operator overloading.
|
|
|
|
void sv_inc(SV *const sv)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_inc_nomg
|
|
X<sv_inc_nomg>
|
|
|
|
Auto-increment of the value in the SV, doing string to numeric conversion
|
|
if necessary. Handles operator overloading. Skips handling 'get' magic.
|
|
|
|
void sv_inc_nomg(SV *const sv)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_insert
|
|
X<sv_insert>
|
|
|
|
Inserts and/or replaces a string at the specified offset/length within the SV.
|
|
Similar to the Perl C<substr()> function, with C<littlelen> bytes starting at
|
|
C<little> replacing C<len> bytes of the string in C<bigstr> starting at
|
|
C<offset>. Handles get magic.
|
|
|
|
void sv_insert(SV *const bigstr, const STRLEN offset,
|
|
const STRLEN len,
|
|
const char *const little,
|
|
const STRLEN littlelen)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_insert_flags
|
|
X<sv_insert_flags>
|
|
|
|
Same as C<sv_insert>, but the extra C<flags> are passed to the
|
|
C<SvPV_force_flags> that applies to C<bigstr>.
|
|
|
|
void sv_insert_flags(SV *const bigstr,
|
|
const STRLEN offset,
|
|
const STRLEN len,
|
|
const char *little,
|
|
const STRLEN littlelen,
|
|
const U32 flags)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item SvIOK
|
|
X<SvIOK>
|
|
|
|
Returns a U32 value indicating whether the SV contains an integer.
|
|
|
|
U32 SvIOK(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvIOK_notUV
|
|
X<SvIOK_notUV>
|
|
|
|
Returns a boolean indicating whether the SV contains a signed integer.
|
|
|
|
bool SvIOK_notUV(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvIOK_off
|
|
X<SvIOK_off>
|
|
|
|
Unsets the IV status of an SV.
|
|
|
|
void SvIOK_off(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvIOK_on
|
|
X<SvIOK_on>
|
|
|
|
Tells an SV that it is an integer.
|
|
|
|
void SvIOK_on(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvIOK_only
|
|
X<SvIOK_only>
|
|
|
|
Tells an SV that it is an integer and disables all other C<OK> bits.
|
|
|
|
void SvIOK_only(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvIOK_only_UV
|
|
X<SvIOK_only_UV>
|
|
|
|
Tells an SV that it is an unsigned integer and disables all other C<OK> bits.
|
|
|
|
void SvIOK_only_UV(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvIOKp
|
|
X<SvIOKp>
|
|
|
|
Returns a U32 value indicating whether the SV contains an integer. Checks
|
|
the B<private> setting. Use C<SvIOK> instead.
|
|
|
|
U32 SvIOKp(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvIOK_UV
|
|
X<SvIOK_UV>
|
|
|
|
Returns a boolean indicating whether the SV contains an integer that must be
|
|
interpreted as unsigned. A non-negative integer whose value is within the
|
|
range of both an IV and a UV may be flagged as either C<SvUOK> or C<SvIOK>.
|
|
|
|
bool SvIOK_UV(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item sv_isa
|
|
X<sv_isa>
|
|
|
|
Returns a boolean indicating whether the SV is blessed into the specified
|
|
class.
|
|
|
|
This does not check for subtypes or method overloading. Use C<sv_isa_sv> to
|
|
verify an inheritance relationship in the same way as the C<isa> operator by
|
|
respecting any C<isa()> method overloading; or C<sv_derived_from_sv> to test
|
|
directly on the actual object type.
|
|
|
|
int sv_isa(SV* sv, const char *const name)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_isa_sv
|
|
X<sv_isa_sv>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Returns a boolean indicating whether the SV is an object reference and is
|
|
derived from the specified class, respecting any C<isa()> method overloading
|
|
it may have. Returns false if C<sv> is not a reference to an object, or is
|
|
not derived from the specified class.
|
|
|
|
This is the function used to implement the behaviour of the C<isa> operator.
|
|
|
|
Does not invoke magic on C<sv>.
|
|
|
|
Not to be confused with the older C<sv_isa> function, which does not use an
|
|
overloaded C<isa()> method, nor will check subclassing.
|
|
|
|
bool sv_isa_sv(SV* sv, SV* namesv)
|
|
|
|
=for hackers
|
|
Found in file universal.c
|
|
|
|
=item SvIsCOW
|
|
X<SvIsCOW>
|
|
|
|
Returns a U32 value indicating whether the SV is Copy-On-Write (either shared
|
|
hash key scalars, or full Copy On Write scalars if 5.9.0 is configured for
|
|
COW).
|
|
|
|
U32 SvIsCOW(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvIsCOW_shared_hash
|
|
X<SvIsCOW_shared_hash>
|
|
|
|
Returns a boolean indicating whether the SV is Copy-On-Write shared hash key
|
|
scalar.
|
|
|
|
bool SvIsCOW_shared_hash(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item sv_isobject
|
|
X<sv_isobject>
|
|
|
|
Returns a boolean indicating whether the SV is an RV pointing to a blessed
|
|
object. If the SV is not an RV, or if the object is not blessed, then this
|
|
will return false.
|
|
|
|
int sv_isobject(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item SvIV
|
|
X<SvIV>
|
|
|
|
Coerces the given SV to IV and returns it. The returned value in many
|
|
circumstances will get stored in C<sv>'s IV slot, but not in all cases. (Use
|
|
C<L</sv_setiv>> to make sure it does).
|
|
|
|
See C<L</SvIVx>> for a version which guarantees to evaluate C<sv> only once.
|
|
|
|
IV SvIV(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvIV_nomg
|
|
X<SvIV_nomg>
|
|
|
|
Like C<SvIV> but doesn't process magic.
|
|
|
|
IV SvIV_nomg(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvIV_set
|
|
X<SvIV_set>
|
|
|
|
Set the value of the IV pointer in sv to val. It is possible to perform
|
|
the same function of this macro with an lvalue assignment to C<SvIVX>.
|
|
With future Perls, however, it will be more efficient to use
|
|
C<SvIV_set> instead of the lvalue assignment to C<SvIVX>.
|
|
|
|
void SvIV_set(SV* sv, IV val)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvIVX
|
|
X<SvIVX>
|
|
|
|
Returns the raw value in the SV's IV slot, without checks or conversions.
|
|
Only use when you are sure C<SvIOK> is true. See also C<L</SvIV>>.
|
|
|
|
IV SvIVX(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvIVx
|
|
X<SvIVx>
|
|
|
|
Coerces the given SV to IV and returns it. The returned value in many
|
|
circumstances will get stored in C<sv>'s IV slot, but not in all cases. (Use
|
|
C<L</sv_setiv>> to make sure it does).
|
|
|
|
This form guarantees to evaluate C<sv> only once. Only use this if C<sv> is an
|
|
expression with side effects, otherwise use the more efficient C<SvIV>.
|
|
|
|
IV SvIVx(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvLEN
|
|
X<SvLEN>
|
|
|
|
Returns the size of the string buffer in the SV, not including any part
|
|
attributable to C<SvOOK>. See C<L</SvCUR>>.
|
|
|
|
STRLEN SvLEN(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item sv_len
|
|
X<sv_len>
|
|
|
|
Returns the length of the string in the SV. Handles magic and type
|
|
coercion and sets the UTF8 flag appropriately. See also C<L</SvCUR>>, which
|
|
gives raw access to the C<xpv_cur> slot.
|
|
|
|
STRLEN sv_len(SV *const sv)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item SvLEN_set
|
|
X<SvLEN_set>
|
|
|
|
Set the size of the string buffer for the SV. See C<L</SvLEN>>.
|
|
|
|
void SvLEN_set(SV* sv, STRLEN len)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item sv_len_utf8
|
|
X<sv_len_utf8>
|
|
|
|
Returns the number of characters in the string in an SV, counting wide
|
|
UTF-8 bytes as a single character. Handles magic and type coercion.
|
|
|
|
STRLEN sv_len_utf8(SV *const sv)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_magic
|
|
X<sv_magic>
|
|
|
|
Adds magic to an SV. First upgrades C<sv> to type C<SVt_PVMG> if
|
|
necessary, then adds a new magic item of type C<how> to the head of the
|
|
magic list.
|
|
|
|
See C<L</sv_magicext>> (which C<sv_magic> now calls) for a description of the
|
|
handling of the C<name> and C<namlen> arguments.
|
|
|
|
You need to use C<sv_magicext> to add magic to C<SvREADONLY> SVs and also
|
|
to add more than one instance of the same C<how>.
|
|
|
|
void sv_magic(SV *const sv, SV *const obj,
|
|
const int how, const char *const name,
|
|
const I32 namlen)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_magicext
|
|
X<sv_magicext>
|
|
|
|
Adds magic to an SV, upgrading it if necessary. Applies the
|
|
supplied C<vtable> and returns a pointer to the magic added.
|
|
|
|
Note that C<sv_magicext> will allow things that C<sv_magic> will not.
|
|
In particular, you can add magic to C<SvREADONLY> SVs, and add more than
|
|
one instance of the same C<how>.
|
|
|
|
If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
|
|
stored, if C<namlen> is zero then C<name> is stored as-is and - as another
|
|
special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
|
|
to contain an SV* and is stored as-is with its C<REFCNT> incremented.
|
|
|
|
(This is now used as a subroutine by C<sv_magic>.)
|
|
|
|
MAGIC * sv_magicext(SV *const sv, SV *const obj,
|
|
const int how,
|
|
const MGVTBL *const vtbl,
|
|
const char *const name,
|
|
const I32 namlen)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item SvMAGIC_set
|
|
X<SvMAGIC_set>
|
|
|
|
Set the value of the MAGIC pointer in C<sv> to val. See C<L</SvIV_set>>.
|
|
|
|
void SvMAGIC_set(SV* sv, MAGIC* val)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item sv_mortalcopy
|
|
X<sv_mortalcopy>
|
|
|
|
Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
|
|
The new SV is marked as mortal. It will be destroyed "soon", either by an
|
|
explicit call to C<FREETMPS>, or by an implicit call at places such as
|
|
statement boundaries. See also C<L</sv_newmortal>> and C<L</sv_2mortal>>.
|
|
|
|
SV* sv_mortalcopy(SV *const oldsv)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_mortalcopy_flags
|
|
X<sv_mortalcopy_flags>
|
|
|
|
Like C<sv_mortalcopy>, but the extra C<flags> are passed to the
|
|
C<sv_setsv_flags>.
|
|
|
|
SV* sv_mortalcopy_flags(SV *const oldsv, U32 flags)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_newmortal
|
|
X<sv_newmortal>
|
|
|
|
Creates a new null SV which is mortal. The reference count of the SV is
|
|
set to 1. It will be destroyed "soon", either by an explicit call to
|
|
C<FREETMPS>, or by an implicit call at places such as statement boundaries.
|
|
See also C<L</sv_mortalcopy>> and C<L</sv_2mortal>>.
|
|
|
|
SV* sv_newmortal()
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_newref
|
|
X<sv_newref>
|
|
|
|
Increment an SV's reference count. Use the C<SvREFCNT_inc()> wrapper
|
|
instead.
|
|
|
|
SV* sv_newref(SV *const sv)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item SvNIOK
|
|
X<SvNIOK>
|
|
|
|
Returns a U32 value indicating whether the SV contains a number, integer or
|
|
double.
|
|
|
|
U32 SvNIOK(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvNIOK_off
|
|
X<SvNIOK_off>
|
|
|
|
Unsets the NV/IV status of an SV.
|
|
|
|
void SvNIOK_off(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvNIOKp
|
|
X<SvNIOKp>
|
|
|
|
Returns a U32 value indicating whether the SV contains a number, integer or
|
|
double. Checks the B<private> setting. Use C<SvNIOK> instead.
|
|
|
|
U32 SvNIOKp(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvNOK
|
|
X<SvNOK>
|
|
|
|
Returns a U32 value indicating whether the SV contains a double.
|
|
|
|
U32 SvNOK(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvNOK_off
|
|
X<SvNOK_off>
|
|
|
|
Unsets the NV status of an SV.
|
|
|
|
void SvNOK_off(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvNOK_on
|
|
X<SvNOK_on>
|
|
|
|
Tells an SV that it is a double.
|
|
|
|
void SvNOK_on(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvNOK_only
|
|
X<SvNOK_only>
|
|
|
|
Tells an SV that it is a double and disables all other OK bits.
|
|
|
|
void SvNOK_only(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvNOKp
|
|
X<SvNOKp>
|
|
|
|
Returns a U32 value indicating whether the SV contains a double. Checks the
|
|
B<private> setting. Use C<SvNOK> instead.
|
|
|
|
U32 SvNOKp(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvNV
|
|
X<SvNV>
|
|
|
|
Coerces the given SV to NV and returns it. The returned value in many
|
|
circumstances will get stored in C<sv>'s NV slot, but not in all cases. (Use
|
|
C<L</sv_setnv>> to make sure it does).
|
|
|
|
See C<L</SvNVx>> for a version which guarantees to evaluate C<sv> only once.
|
|
|
|
NV SvNV(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvNV_nomg
|
|
X<SvNV_nomg>
|
|
|
|
Like C<SvNV> but doesn't process magic.
|
|
|
|
NV SvNV_nomg(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvNV_set
|
|
X<SvNV_set>
|
|
|
|
Set the value of the NV pointer in C<sv> to val. See C<L</SvIV_set>>.
|
|
|
|
void SvNV_set(SV* sv, NV val)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvNVX
|
|
X<SvNVX>
|
|
|
|
Returns the raw value in the SV's NV slot, without checks or conversions.
|
|
Only use when you are sure C<SvNOK> is true. See also C<L</SvNV>>.
|
|
|
|
NV SvNVX(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvNVx
|
|
X<SvNVx>
|
|
|
|
Coerces the given SV to NV and returns it. The returned value in many
|
|
circumstances will get stored in C<sv>'s NV slot, but not in all cases. (Use
|
|
C<L</sv_setnv>> to make sure it does).
|
|
|
|
This form guarantees to evaluate C<sv> only once. Only use this if C<sv> is an
|
|
expression with side effects, otherwise use the more efficient C<SvNV>.
|
|
|
|
NV SvNVx(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvOK
|
|
X<SvOK>
|
|
|
|
Returns a U32 value indicating whether the value is defined. This is
|
|
only meaningful for scalars.
|
|
|
|
U32 SvOK(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvOOK
|
|
X<SvOOK>
|
|
|
|
Returns a U32 indicating whether the pointer to the string buffer is offset.
|
|
This hack is used internally to speed up removal of characters from the
|
|
beginning of a C<SvPV>. When C<SvOOK> is true, then the start of the
|
|
allocated string buffer is actually C<SvOOK_offset()> bytes before C<SvPVX>.
|
|
This offset used to be stored in C<SvIVX>, but is now stored within the spare
|
|
part of the buffer.
|
|
|
|
U32 SvOOK(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvOOK_offset
|
|
X<SvOOK_offset>
|
|
|
|
Reads into C<len> the offset from C<SvPVX> back to the true start of the
|
|
allocated buffer, which will be non-zero if C<sv_chop> has been used to
|
|
efficiently remove characters from start of the buffer. Implemented as a
|
|
macro, which takes the address of C<len>, which must be of type C<STRLEN>.
|
|
Evaluates C<sv> more than once. Sets C<len> to 0 if C<SvOOK(sv)> is false.
|
|
|
|
void SvOOK_offset(SV*sv, STRLEN len)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvPOK
|
|
X<SvPOK>
|
|
|
|
Returns a U32 value indicating whether the SV contains a character
|
|
string.
|
|
|
|
U32 SvPOK(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvPOK_off
|
|
X<SvPOK_off>
|
|
|
|
Unsets the PV status of an SV.
|
|
|
|
void SvPOK_off(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvPOK_on
|
|
X<SvPOK_on>
|
|
|
|
Tells an SV that it is a string.
|
|
|
|
void SvPOK_on(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvPOK_only
|
|
X<SvPOK_only>
|
|
|
|
Tells an SV that it is a string and disables all other C<OK> bits.
|
|
Will also turn off the UTF-8 status.
|
|
|
|
void SvPOK_only(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvPOK_only_UTF8
|
|
X<SvPOK_only_UTF8>
|
|
|
|
Tells an SV that it is a string and disables all other C<OK> bits,
|
|
and leaves the UTF-8 status as it was.
|
|
|
|
void SvPOK_only_UTF8(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvPOKp
|
|
X<SvPOKp>
|
|
|
|
Returns a U32 value indicating whether the SV contains a character string.
|
|
Checks the B<private> setting. Use C<SvPOK> instead.
|
|
|
|
U32 SvPOKp(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item sv_pos_b2u
|
|
X<sv_pos_b2u>
|
|
|
|
Converts the value pointed to by C<offsetp> from a count of bytes from the
|
|
start of the string, to a count of the equivalent number of UTF-8 chars.
|
|
Handles magic and type coercion.
|
|
|
|
Use C<sv_pos_b2u_flags> in preference, which correctly handles strings
|
|
longer than 2Gb.
|
|
|
|
void sv_pos_b2u(SV *const sv, I32 *const offsetp)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_pos_b2u_flags
|
|
X<sv_pos_b2u_flags>
|
|
|
|
Converts C<offset> from a count of bytes from the start of the string, to
|
|
a count of the equivalent number of UTF-8 chars. Handles type coercion.
|
|
C<flags> is passed to C<SvPV_flags>, and usually should be
|
|
C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
|
|
|
|
STRLEN sv_pos_b2u_flags(SV *const sv,
|
|
STRLEN const offset, U32 flags)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_pos_u2b
|
|
X<sv_pos_u2b>
|
|
|
|
Converts the value pointed to by C<offsetp> from a count of UTF-8 chars from
|
|
the start of the string, to a count of the equivalent number of bytes; if
|
|
C<lenp> is non-zero, it does the same to C<lenp>, but this time starting from
|
|
the offset, rather than from the start of the string. Handles magic and
|
|
type coercion.
|
|
|
|
Use C<sv_pos_u2b_flags> in preference, which correctly handles strings longer
|
|
than 2Gb.
|
|
|
|
void sv_pos_u2b(SV *const sv, I32 *const offsetp,
|
|
I32 *const lenp)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_pos_u2b_flags
|
|
X<sv_pos_u2b_flags>
|
|
|
|
Converts the offset from a count of UTF-8 chars from
|
|
the start of the string, to a count of the equivalent number of bytes; if
|
|
C<lenp> is non-zero, it does the same to C<lenp>, but this time starting from
|
|
C<offset>, rather than from the start
|
|
of the string. Handles type coercion.
|
|
C<flags> is passed to C<SvPV_flags>, and usually should be
|
|
C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
|
|
|
|
STRLEN sv_pos_u2b_flags(SV *const sv, STRLEN uoffset,
|
|
STRLEN *const lenp, U32 flags)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item SvPV
|
|
X<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. The SV may cache the
|
|
stringified version becoming C<SvPOK>. Handles 'get' magic. The
|
|
C<len> variable will be set to the length of the string (this is a macro, so
|
|
don't use C<&len>). See also C<L</SvPVx>> for a version which guarantees to
|
|
evaluate C<sv> only once.
|
|
|
|
Note that there is no guarantee that the return value of C<SvPV()> is
|
|
equal to C<SvPVX(sv)>, or that C<SvPVX(sv)> contains valid data, or that
|
|
successive calls to C<SvPV(sv)> will return the same pointer value each
|
|
time. This is due to the way that things like overloading and
|
|
Copy-On-Write are handled. In these cases, the return value may point to
|
|
a temporary buffer or similar. If you absolutely need the C<SvPVX> field to
|
|
be valid (for example, if you intend to write to it), then see
|
|
C<L</SvPV_force>>.
|
|
|
|
char* SvPV(SV* sv, STRLEN len)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvPVbyte
|
|
X<SvPVbyte>
|
|
|
|
Like C<SvPV>, but converts C<sv> to byte representation first if necessary. If
|
|
the SV cannot be downgraded from UTF-8, this croaks.
|
|
|
|
char* SvPVbyte(SV* sv, STRLEN len)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvPVbyte_force
|
|
X<SvPVbyte_force>
|
|
|
|
Like C<SvPV_force>, but converts C<sv> to byte representation first if
|
|
necessary. If the SV cannot be downgraded from UTF-8, this croaks.
|
|
|
|
char* SvPVbyte_force(SV* sv, STRLEN len)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvPVbyte_nolen
|
|
X<SvPVbyte_nolen>
|
|
|
|
Like C<SvPV_nolen>, but converts C<sv> to byte representation first if
|
|
necessary. If the SV cannot be downgraded from UTF-8, this croaks.
|
|
|
|
char* SvPVbyte_nolen(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvPVbyte_nomg
|
|
X<SvPVbyte_nomg>
|
|
|
|
Like C<SvPVbyte>, but does not process get magic.
|
|
|
|
char* SvPVbyte_nomg(SV* sv, STRLEN len)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item sv_pvbyten_force
|
|
X<sv_pvbyten_force>
|
|
|
|
The backend for the C<SvPVbytex_force> macro. Always use the macro
|
|
instead. If the SV cannot be downgraded from UTF-8, this croaks.
|
|
|
|
char* sv_pvbyten_force(SV *const sv, STRLEN *const lp)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item SvPVbyte_or_null
|
|
X<SvPVbyte_or_null>
|
|
|
|
Like C<SvPVbyte>, but when C<sv> is undef, returns C<NULL>.
|
|
|
|
char* SvPVbyte_or_null(SV* sv, STRLEN len)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvPVbyte_or_null_nomg
|
|
X<SvPVbyte_or_null_nomg>
|
|
|
|
Like C<SvPVbyte_or_null>, but does not process get magic.
|
|
|
|
char* SvPVbyte_or_null_nomg(SV* sv, STRLEN len)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvPVbytex
|
|
X<SvPVbytex>
|
|
|
|
Like C<SvPV>, but converts C<sv> to byte representation first if necessary.
|
|
Guarantees to evaluate C<sv> only once; use the more efficient C<SvPVbyte>
|
|
otherwise. If the SV cannot be downgraded from UTF-8, this croaks.
|
|
|
|
char* SvPVbytex(SV* sv, STRLEN len)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvPVbytex_force
|
|
X<SvPVbytex_force>
|
|
|
|
Like C<SvPV_force>, but converts C<sv> to byte representation first if necessary.
|
|
Guarantees to evaluate C<sv> only once; use the more efficient C<SvPVbyte_force>
|
|
otherwise. If the SV cannot be downgraded from UTF-8, this croaks.
|
|
|
|
char* SvPVbytex_force(SV* sv, STRLEN len)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvPVCLEAR
|
|
X<SvPVCLEAR>
|
|
|
|
Ensures that sv is a SVt_PV and that its SvCUR is 0, and that it is
|
|
properly null terminated. Equivalent to sv_setpvs(""), but more efficient.
|
|
|
|
char * SvPVCLEAR(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvPV_force
|
|
X<SvPV_force>
|
|
|
|
Like C<SvPV> but will force the SV into containing a string (C<SvPOK>), and
|
|
only a string (C<SvPOK_only>), by hook or by crook. You need force if you are
|
|
going to update the C<SvPVX> directly. Processes get magic.
|
|
|
|
Note that coercing an arbitrary scalar into a plain PV will potentially
|
|
strip useful data from it. For example if the SV was C<SvROK>, then the
|
|
referent will have its reference count decremented, and the SV itself may
|
|
be converted to an C<SvPOK> scalar with a string buffer containing a value
|
|
such as C<"ARRAY(0x1234)">.
|
|
|
|
char* SvPV_force(SV* sv, STRLEN len)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvPV_force_nomg
|
|
X<SvPV_force_nomg>
|
|
|
|
Like C<SvPV_force>, but doesn't process get magic.
|
|
|
|
char* SvPV_force_nomg(SV* sv, STRLEN len)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvPV_nolen
|
|
X<SvPV_nolen>
|
|
|
|
Like C<SvPV> but doesn't set a length variable.
|
|
|
|
char* SvPV_nolen(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvPV_nomg
|
|
X<SvPV_nomg>
|
|
|
|
Like C<SvPV> but doesn't process magic.
|
|
|
|
char* SvPV_nomg(SV* sv, STRLEN len)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvPV_nomg_nolen
|
|
X<SvPV_nomg_nolen>
|
|
|
|
Like C<SvPV_nolen> but doesn't process magic.
|
|
|
|
char* SvPV_nomg_nolen(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item sv_pvn_force
|
|
X<sv_pvn_force>
|
|
|
|
Get a sensible string out of the SV somehow.
|
|
A private implementation of the C<SvPV_force> macro for compilers which
|
|
can't cope with complex macro expressions. Always use the macro instead.
|
|
|
|
char* sv_pvn_force(SV* sv, STRLEN* lp)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_pvn_force_flags
|
|
X<sv_pvn_force_flags>
|
|
|
|
Get a sensible string out of the SV somehow.
|
|
If C<flags> has the C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
|
|
appropriate, else not. C<sv_pvn_force> and C<sv_pvn_force_nomg> are
|
|
implemented in terms of this function.
|
|
You normally want to use the various wrapper macros instead: see
|
|
C<L</SvPV_force>> and C<L</SvPV_force_nomg>>.
|
|
|
|
char* sv_pvn_force_flags(SV *const sv,
|
|
STRLEN *const lp,
|
|
const I32 flags)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item SvPV_set
|
|
X<SvPV_set>
|
|
|
|
This is probably not what you want to use, you probably wanted
|
|
L</sv_usepvn_flags> or L</sv_setpvn> or L</sv_setpvs>.
|
|
|
|
Set the value of the PV pointer in C<sv> to the Perl allocated
|
|
C<NUL>-terminated string C<val>. See also C<L</SvIV_set>>.
|
|
|
|
Remember to free the previous PV buffer. There are many things to check.
|
|
Beware that the existing pointer may be involved in copy-on-write or other
|
|
mischief, so do C<SvOOK_off(sv)> and use C<sv_force_normal> or
|
|
C<SvPV_force> (or check the C<SvIsCOW> flag) first to make sure this
|
|
modification is safe. Then finally, if it is not a COW, call C<SvPV_free> to
|
|
free the previous PV buffer.
|
|
|
|
void SvPV_set(SV* sv, char* val)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvPVutf8
|
|
X<SvPVutf8>
|
|
|
|
Like C<SvPV>, but converts C<sv> to UTF-8 first if necessary.
|
|
|
|
char* SvPVutf8(SV* sv, STRLEN len)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item sv_pvutf8n_force
|
|
X<sv_pvutf8n_force>
|
|
|
|
The backend for the C<SvPVutf8x_force> macro. Always use the macro
|
|
instead.
|
|
|
|
char* sv_pvutf8n_force(SV *const sv, STRLEN *const lp)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item SvPVutf8x
|
|
X<SvPVutf8x>
|
|
|
|
Like C<SvPV>, but converts C<sv> to UTF-8 first if necessary.
|
|
Guarantees to evaluate C<sv> only once; use the more efficient C<SvPVutf8>
|
|
otherwise.
|
|
|
|
char* SvPVutf8x(SV* sv, STRLEN len)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvPVutf8x_force
|
|
X<SvPVutf8x_force>
|
|
|
|
Like C<SvPV_force>, but converts C<sv> to UTF-8 first if necessary.
|
|
Guarantees to evaluate C<sv> only once; use the more efficient C<SvPVutf8_force>
|
|
otherwise.
|
|
|
|
char* SvPVutf8x_force(SV* sv, STRLEN len)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvPVutf8_force
|
|
X<SvPVutf8_force>
|
|
|
|
Like C<SvPV_force>, but converts C<sv> to UTF-8 first if necessary.
|
|
|
|
char* SvPVutf8_force(SV* sv, STRLEN len)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvPVutf8_nolen
|
|
X<SvPVutf8_nolen>
|
|
|
|
Like C<SvPV_nolen>, but converts C<sv> to UTF-8 first if necessary.
|
|
|
|
char* SvPVutf8_nolen(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvPVutf8_nomg
|
|
X<SvPVutf8_nomg>
|
|
|
|
Like C<SvPVutf8>, but does not process get magic.
|
|
|
|
char* SvPVutf8_nomg(SV* sv, STRLEN len)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvPVutf8_or_null
|
|
X<SvPVutf8_or_null>
|
|
|
|
Like C<SvPVutf8>, but when C<sv> is undef, returns C<NULL>.
|
|
|
|
char* SvPVutf8_or_null(SV* sv, STRLEN len)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvPVutf8_or_null_nomg
|
|
X<SvPVutf8_or_null_nomg>
|
|
|
|
Like C<SvPVutf8_or_null>, but does not process get magic.
|
|
|
|
char* SvPVutf8_or_null_nomg(SV* sv, STRLEN len)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvPVX
|
|
X<SvPVX>
|
|
|
|
Returns a pointer to the physical string in the SV. The SV must contain a
|
|
string. Prior to 5.9.3 it is not safe
|
|
to execute this macro unless the SV's
|
|
type >= C<SVt_PV>.
|
|
|
|
This is also used to store the name of an autoloaded subroutine in an XS
|
|
AUTOLOAD routine. See L<perlguts/Autoloading with XSUBs>.
|
|
|
|
char* SvPVX(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvPVx
|
|
X<SvPVx>
|
|
|
|
A version of C<SvPV> which guarantees to evaluate C<sv> only once.
|
|
Only use this if C<sv> is an expression with side effects, otherwise use the
|
|
more efficient C<SvPV>.
|
|
|
|
char* SvPVx(SV* sv, STRLEN len)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvREADONLY
|
|
X<SvREADONLY>
|
|
|
|
Returns true if the argument is readonly, otherwise returns false.
|
|
Exposed to perl code via Internals::SvREADONLY().
|
|
|
|
U32 SvREADONLY(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvREADONLY_off
|
|
X<SvREADONLY_off>
|
|
|
|
Mark an object as not-readonly. Exactly what this mean depends on the
|
|
object type. Exposed to perl code via Internals::SvREADONLY().
|
|
|
|
U32 SvREADONLY_off(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvREADONLY_on
|
|
X<SvREADONLY_on>
|
|
|
|
Mark an object as readonly. Exactly what this means depends on the object
|
|
type. Exposed to perl code via Internals::SvREADONLY().
|
|
|
|
U32 SvREADONLY_on(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item sv_ref
|
|
X<sv_ref>
|
|
|
|
Returns a SV describing what the SV passed in is a reference to.
|
|
|
|
dst can be a SV to be set to the description or NULL, in which case a
|
|
mortal SV is returned.
|
|
|
|
If ob is true and the SV is blessed, the description is the class
|
|
name, otherwise it is the type of the SV, "SCALAR", "ARRAY" etc.
|
|
|
|
SV* sv_ref(SV *dst, const SV *const sv,
|
|
const int ob)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item SvREFCNT
|
|
X<SvREFCNT>
|
|
|
|
Returns the value of the object's reference count. Exposed
|
|
to perl code via Internals::SvREFCNT().
|
|
|
|
U32 SvREFCNT(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvREFCNT_dec
|
|
X<SvREFCNT_dec>
|
|
|
|
Decrements the reference count of the given SV. C<sv> may be C<NULL>.
|
|
|
|
void SvREFCNT_dec(SV *sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvREFCNT_dec_NN
|
|
X<SvREFCNT_dec_NN>
|
|
|
|
Same as C<SvREFCNT_dec>, but can only be used if you know C<sv>
|
|
is not C<NULL>. Since we don't have to check the NULLness, it's faster
|
|
and smaller.
|
|
|
|
void SvREFCNT_dec_NN(SV *sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvREFCNT_inc
|
|
X<SvREFCNT_inc>
|
|
|
|
Increments the reference count of the given SV, returning the SV.
|
|
|
|
All of the following C<SvREFCNT_inc>* are optimized versions of
|
|
C<SvREFCNT_inc>, and can be replaced with C<SvREFCNT_inc>.
|
|
|
|
SV * SvREFCNT_inc(SV *sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvREFCNT_inc_NN
|
|
X<SvREFCNT_inc_NN>
|
|
|
|
Same as C<SvREFCNT_inc>, but can only be used if you know C<sv>
|
|
is not C<NULL>. Since we don't have to check the NULLness, it's faster
|
|
and smaller.
|
|
|
|
SV * SvREFCNT_inc_NN(SV *sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvREFCNT_inc_simple
|
|
X<SvREFCNT_inc_simple>
|
|
|
|
Same as C<SvREFCNT_inc>, but can only be used with expressions without side
|
|
effects. Since we don't have to store a temporary value, it's faster.
|
|
|
|
SV* SvREFCNT_inc_simple(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvREFCNT_inc_simple_NN
|
|
X<SvREFCNT_inc_simple_NN>
|
|
|
|
Same as C<SvREFCNT_inc_simple>, but can only be used if you know C<sv>
|
|
is not C<NULL>. Since we don't have to check the NULLness, it's faster
|
|
and smaller.
|
|
|
|
SV* SvREFCNT_inc_simple_NN(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvREFCNT_inc_simple_void
|
|
X<SvREFCNT_inc_simple_void>
|
|
|
|
Same as C<SvREFCNT_inc_simple>, but can only be used if you don't need the
|
|
return value. The macro doesn't need to return a meaningful value.
|
|
|
|
void SvREFCNT_inc_simple_void(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvREFCNT_inc_simple_void_NN
|
|
X<SvREFCNT_inc_simple_void_NN>
|
|
|
|
Same as C<SvREFCNT_inc>, but can only be used if you don't need the return
|
|
value, and you know that C<sv> is not C<NULL>. The macro doesn't need
|
|
to return a meaningful value, or check for NULLness, so it's smaller
|
|
and faster.
|
|
|
|
void SvREFCNT_inc_simple_void_NN(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvREFCNT_inc_void
|
|
X<SvREFCNT_inc_void>
|
|
|
|
Same as C<SvREFCNT_inc>, but can only be used if you don't need the
|
|
return value. The macro doesn't need to return a meaningful value.
|
|
|
|
void SvREFCNT_inc_void(SV *sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvREFCNT_inc_void_NN
|
|
X<SvREFCNT_inc_void_NN>
|
|
|
|
Same as C<SvREFCNT_inc>, but can only be used if you don't need the return
|
|
value, and you know that C<sv> is not C<NULL>. The macro doesn't need
|
|
to return a meaningful value, or check for NULLness, so it's smaller
|
|
and faster.
|
|
|
|
void SvREFCNT_inc_void_NN(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item sv_reftype
|
|
X<sv_reftype>
|
|
|
|
Returns a string describing what the SV is a reference to.
|
|
|
|
If ob is true and the SV is blessed, the string is the class name,
|
|
otherwise it is the type of the SV, "SCALAR", "ARRAY" etc.
|
|
|
|
const char* sv_reftype(const SV *const sv, const int ob)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_replace
|
|
X<sv_replace>
|
|
|
|
Make the first argument a copy of the second, then delete the original.
|
|
The target SV physically takes over ownership of the body of the source SV
|
|
and inherits its flags; however, the target keeps any magic it owns,
|
|
and any magic in the source is discarded.
|
|
Note that this is a rather specialist SV copying operation; most of the
|
|
time you'll want to use C<sv_setsv> or one of its many macro front-ends.
|
|
|
|
void sv_replace(SV *const sv, SV *const nsv)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_report_used
|
|
X<sv_report_used>
|
|
|
|
Dump the contents of all SVs not yet freed (debugging aid).
|
|
|
|
void sv_report_used()
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_reset
|
|
X<sv_reset>
|
|
|
|
Underlying implementation for the C<reset> Perl function.
|
|
Note that the perl-level function is vaguely deprecated.
|
|
|
|
void sv_reset(const char* s, HV *const stash)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item SvROK
|
|
X<SvROK>
|
|
|
|
Tests if the SV is an RV.
|
|
|
|
U32 SvROK(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvROK_off
|
|
X<SvROK_off>
|
|
|
|
Unsets the RV status of an SV.
|
|
|
|
void SvROK_off(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvROK_on
|
|
X<SvROK_on>
|
|
|
|
Tells an SV that it is an RV.
|
|
|
|
void SvROK_on(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvRV
|
|
X<SvRV>
|
|
|
|
Dereferences an RV to return the SV.
|
|
|
|
SV* SvRV(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvRV_set
|
|
X<SvRV_set>
|
|
|
|
Set the value of the RV pointer in C<sv> to val. See C<L</SvIV_set>>.
|
|
|
|
void SvRV_set(SV* sv, SV* val)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item sv_rvunweaken
|
|
X<sv_rvunweaken>
|
|
|
|
Unweaken a reference: Clear the C<SvWEAKREF> flag on this RV; remove
|
|
the backreference to this RV from the array of backreferences
|
|
associated with the target SV, increment the refcount of the target.
|
|
Silently ignores C<undef> and warns on non-weak references.
|
|
|
|
SV* sv_rvunweaken(SV *const sv)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_rvweaken
|
|
X<sv_rvweaken>
|
|
|
|
Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
|
|
referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
|
|
push a back-reference to this RV onto the array of backreferences
|
|
associated with that magic. If the RV is magical, set magic will be
|
|
called after the RV is cleared. Silently ignores C<undef> and warns
|
|
on already-weak references.
|
|
|
|
SV* sv_rvweaken(SV *const sv)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_setiv
|
|
X<sv_setiv>
|
|
|
|
Copies an integer into the given SV, upgrading first if necessary.
|
|
Does not handle 'set' magic. See also C<L</sv_setiv_mg>>.
|
|
|
|
void sv_setiv(SV *const sv, const IV num)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_setiv_mg
|
|
X<sv_setiv_mg>
|
|
|
|
Like C<sv_setiv>, but also handles 'set' magic.
|
|
|
|
void sv_setiv_mg(SV *const sv, const IV i)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_setnv
|
|
X<sv_setnv>
|
|
|
|
Copies a double into the given SV, upgrading first if necessary.
|
|
Does not handle 'set' magic. See also C<L</sv_setnv_mg>>.
|
|
|
|
void sv_setnv(SV *const sv, const NV num)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_setnv_mg
|
|
X<sv_setnv_mg>
|
|
|
|
Like C<sv_setnv>, but also handles 'set' magic.
|
|
|
|
void sv_setnv_mg(SV *const sv, const NV num)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_setpv
|
|
X<sv_setpv>
|
|
|
|
Copies a string into an SV. The string must be terminated with a C<NUL>
|
|
character, and not contain embeded C<NUL>'s.
|
|
Does not handle 'set' magic. See C<L</sv_setpv_mg>>.
|
|
|
|
void sv_setpv(SV *const sv, const char *const ptr)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_setpvf
|
|
X<sv_setpvf>
|
|
|
|
Works like C<sv_catpvf> but copies the text into the SV instead of
|
|
appending it. Does not handle 'set' magic. See C<L</sv_setpvf_mg>>.
|
|
|
|
void sv_setpvf(SV *const sv, const char *const pat,
|
|
...)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_setpvf_mg
|
|
X<sv_setpvf_mg>
|
|
|
|
Like C<sv_setpvf>, but also handles 'set' magic.
|
|
|
|
void sv_setpvf_mg(SV *const sv,
|
|
const char *const pat, ...)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_setpviv
|
|
X<sv_setpviv>
|
|
|
|
|
|
DEPRECATED! It is planned to remove this function from a
|
|
future release of Perl. Do not use it for new code; remove it from
|
|
existing code.
|
|
|
|
|
|
Copies an integer into the given SV, also updating its string value.
|
|
Does not handle 'set' magic. See C<L</sv_setpviv_mg>>.
|
|
|
|
void sv_setpviv(SV *const sv, const IV num)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_setpviv_mg
|
|
X<sv_setpviv_mg>
|
|
|
|
|
|
DEPRECATED! It is planned to remove this function from a
|
|
future release of Perl. Do not use it for new code; remove it from
|
|
existing code.
|
|
|
|
|
|
Like C<sv_setpviv>, but also handles 'set' magic.
|
|
|
|
void sv_setpviv_mg(SV *const sv, const IV iv)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_setpvn
|
|
X<sv_setpvn>
|
|
|
|
Copies a string (possibly containing embedded C<NUL> characters) into an SV.
|
|
The C<len> parameter indicates the number of
|
|
bytes to be copied. If the C<ptr> argument is NULL the SV will become
|
|
undefined. Does not handle 'set' magic. See C<L</sv_setpvn_mg>>.
|
|
|
|
The UTF-8 flag is not changed by this function. A terminating NUL byte is
|
|
guaranteed.
|
|
|
|
void sv_setpvn(SV *const sv, const char *const ptr,
|
|
const STRLEN len)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_setpvn_mg
|
|
X<sv_setpvn_mg>
|
|
|
|
Like C<sv_setpvn>, but also handles 'set' magic.
|
|
|
|
void sv_setpvn_mg(SV *const sv,
|
|
const char *const ptr,
|
|
const STRLEN len)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_setpvs
|
|
X<sv_setpvs>
|
|
|
|
Like C<sv_setpvn>, but takes a literal string instead of a
|
|
string/length pair.
|
|
|
|
void sv_setpvs(SV* sv, "literal string")
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item sv_setpvs_mg
|
|
X<sv_setpvs_mg>
|
|
|
|
Like C<sv_setpvn_mg>, but takes a literal string instead of a
|
|
string/length pair.
|
|
|
|
void sv_setpvs_mg(SV* sv, "literal string")
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item sv_setpv_bufsize
|
|
X<sv_setpv_bufsize>
|
|
|
|
Sets the SV to be a string of cur bytes length, with at least
|
|
len bytes available. Ensures that there is a null byte at SvEND.
|
|
Returns a char * pointer to the SvPV buffer.
|
|
|
|
char * sv_setpv_bufsize(SV *const sv, const STRLEN cur,
|
|
const STRLEN len)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_setpv_mg
|
|
X<sv_setpv_mg>
|
|
|
|
Like C<sv_setpv>, but also handles 'set' magic.
|
|
|
|
void sv_setpv_mg(SV *const sv, const char *const ptr)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_setref_iv
|
|
X<sv_setref_iv>
|
|
|
|
Copies an integer 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. The C<classname> argument indicates the package for the
|
|
blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
|
|
will have a reference count of 1, and the RV will be returned.
|
|
|
|
SV* sv_setref_iv(SV *const rv,
|
|
const char *const classname,
|
|
const IV iv)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_setref_nv
|
|
X<sv_setref_nv>
|
|
|
|
Copies a double 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. The C<classname> argument indicates the package for the
|
|
blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
|
|
will have a reference count of 1, and the RV will be returned.
|
|
|
|
SV* sv_setref_nv(SV *const rv,
|
|
const char *const classname,
|
|
const NV nv)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_setref_pv
|
|
X<sv_setref_pv>
|
|
|
|
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 C<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<NULL> to avoid the blessing. The new SV
|
|
will have a reference count of 1, and the RV will be returned.
|
|
|
|
Do not use with other Perl types such as HV, AV, SV, CV, because those
|
|
objects will become corrupted by the pointer copy process.
|
|
|
|
Note that C<sv_setref_pvn> copies the string while this copies the pointer.
|
|
|
|
SV* sv_setref_pv(SV *const rv,
|
|
const char *const classname,
|
|
void *const pv)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_setref_pvn
|
|
X<sv_setref_pvn>
|
|
|
|
Copies a string into a new SV, optionally blessing the SV. The length of the
|
|
string must be specified with C<n>. The C<rv> argument will be upgraded to
|
|
an RV. That RV will be modified to point to the new SV. The C<classname>
|
|
argument indicates the package for the blessing. Set C<classname> to
|
|
C<NULL> to avoid the blessing. The new SV will have a reference count
|
|
of 1, and the RV will be returned.
|
|
|
|
Note that C<sv_setref_pv> copies the pointer while this copies the string.
|
|
|
|
SV* sv_setref_pvn(SV *const rv,
|
|
const char *const classname,
|
|
const char *const pv,
|
|
const STRLEN n)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_setref_pvs
|
|
X<sv_setref_pvs>
|
|
|
|
Like C<sv_setref_pvn>, but takes a literal string instead of
|
|
a string/length pair.
|
|
|
|
SV * sv_setref_pvs(SV *const rv,
|
|
const char *const classname,
|
|
"literal string")
|
|
|
|
=for hackers
|
|
Found in file handy.h
|
|
|
|
=item sv_setref_uv
|
|
X<sv_setref_uv>
|
|
|
|
Copies an unsigned integer 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. The C<classname> argument indicates the package for the
|
|
blessing. Set C<classname> to C<NULL> to avoid the blessing. The new SV
|
|
will have a reference count of 1, and the RV will be returned.
|
|
|
|
SV* sv_setref_uv(SV *const rv,
|
|
const char *const classname,
|
|
const UV uv)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_setsv
|
|
X<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, so don't use this
|
|
function if the source SV needs to be reused. Does not handle 'set' magic on
|
|
destination SV. Calls 'get' magic on source SV. Loosely speaking, it
|
|
performs a copy-by-value, obliterating any previous content of the
|
|
destination.
|
|
|
|
You probably want to use one of the assortment of wrappers, such as
|
|
C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
|
|
C<SvSetMagicSV_nosteal>.
|
|
|
|
void sv_setsv(SV *dstr, SV *sstr)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_setsv_flags
|
|
X<sv_setsv_flags>
|
|
|
|
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, so don't use this
|
|
function if the source SV needs to be reused. Does not handle 'set' magic.
|
|
Loosely speaking, it performs a copy-by-value, obliterating any previous
|
|
content of the destination.
|
|
If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
|
|
C<ssv> if appropriate, else not. If the C<flags>
|
|
parameter has the C<SV_NOSTEAL> bit set then the
|
|
buffers of temps will not be stolen. C<sv_setsv>
|
|
and C<sv_setsv_nomg> are implemented in terms of this function.
|
|
|
|
You probably want to use one of the assortment of wrappers, such as
|
|
C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
|
|
C<SvSetMagicSV_nosteal>.
|
|
|
|
This is the primary function for copying scalars, and most other
|
|
copy-ish functions and macros use this underneath.
|
|
|
|
void sv_setsv_flags(SV *dstr, SV *sstr,
|
|
const I32 flags)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_setsv_mg
|
|
X<sv_setsv_mg>
|
|
|
|
Like C<sv_setsv>, but also handles 'set' magic.
|
|
|
|
void sv_setsv_mg(SV *const dstr, SV *const sstr)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_setsv_nomg
|
|
X<sv_setsv_nomg>
|
|
|
|
Like C<sv_setsv> but doesn't process magic.
|
|
|
|
void sv_setsv_nomg(SV* dsv, SV* ssv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item sv_setuv
|
|
X<sv_setuv>
|
|
|
|
Copies an unsigned integer into the given SV, upgrading first if necessary.
|
|
Does not handle 'set' magic. See also C<L</sv_setuv_mg>>.
|
|
|
|
void sv_setuv(SV *const sv, const UV num)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_setuv_mg
|
|
X<sv_setuv_mg>
|
|
|
|
Like C<sv_setuv>, but also handles 'set' magic.
|
|
|
|
void sv_setuv_mg(SV *const sv, const UV u)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_set_undef
|
|
X<sv_set_undef>
|
|
|
|
Equivalent to C<sv_setsv(sv, &PL_sv_undef)>, but more efficient.
|
|
Doesn't handle set magic.
|
|
|
|
The perl equivalent is C<$sv = undef;>. Note that it doesn't free any string
|
|
buffer, unlike C<undef $sv>.
|
|
|
|
Introduced in perl 5.25.12.
|
|
|
|
void sv_set_undef(SV *sv)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item SvSTASH
|
|
X<SvSTASH>
|
|
|
|
Returns the stash of the SV.
|
|
|
|
HV* SvSTASH(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvSTASH_set
|
|
X<SvSTASH_set>
|
|
|
|
Set the value of the STASH pointer in C<sv> to val. See C<L</SvIV_set>>.
|
|
|
|
void SvSTASH_set(SV* sv, HV* val)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvTAINT
|
|
X<SvTAINT>
|
|
|
|
Taints an SV if tainting is enabled, and if some input to the current
|
|
expression is tainted--usually a variable, but possibly also implicit
|
|
inputs such as locale settings. C<SvTAINT> propagates that taintedness to
|
|
the outputs of an expression in a pessimistic fashion; i.e., without paying
|
|
attention to precisely which outputs are influenced by which inputs.
|
|
|
|
void SvTAINT(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvTAINTED
|
|
X<SvTAINTED>
|
|
|
|
Checks to see if an SV is tainted. Returns TRUE if it is, FALSE if
|
|
not.
|
|
|
|
bool SvTAINTED(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item sv_tainted
|
|
X<sv_tainted>
|
|
|
|
Test an SV for taintedness. Use C<SvTAINTED> instead.
|
|
|
|
bool sv_tainted(SV *const sv)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item SvTAINTED_off
|
|
X<SvTAINTED_off>
|
|
|
|
Untaints an SV. Be I<very> careful with this routine, as it short-circuits
|
|
some of Perl's fundamental security features. XS module authors should not
|
|
use this function unless they fully understand all the implications of
|
|
unconditionally untainting the value. Untainting should be done in the
|
|
standard perl fashion, via a carefully crafted regexp, rather than directly
|
|
untainting variables.
|
|
|
|
void SvTAINTED_off(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvTAINTED_on
|
|
X<SvTAINTED_on>
|
|
|
|
Marks an SV as tainted if tainting is enabled.
|
|
|
|
void SvTAINTED_on(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvTRUE
|
|
X<SvTRUE>
|
|
|
|
Returns a boolean indicating whether Perl would evaluate the SV as true or
|
|
false. See C<L</SvOK>> for a defined/undefined test. Handles 'get' magic
|
|
unless the scalar is already C<SvPOK>, C<SvIOK> or C<SvNOK> (the public, not the
|
|
private flags).
|
|
|
|
See C<L</SvTRUEx>> for a version which guarantees to evaluate C<sv> only once.
|
|
|
|
bool SvTRUE(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item sv_true
|
|
X<sv_true>
|
|
|
|
Returns true if the SV has a true value by Perl's rules.
|
|
Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
|
|
instead use an in-line version.
|
|
|
|
I32 sv_true(SV *const sv)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item SvTRUE_nomg
|
|
X<SvTRUE_nomg>
|
|
|
|
Returns a boolean indicating whether Perl would evaluate the SV as true or
|
|
false. See C<L</SvOK>> for a defined/undefined test. Does not handle 'get' magic.
|
|
|
|
bool SvTRUE_nomg(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvTRUEx
|
|
X<SvTRUEx>
|
|
|
|
Returns a boolean indicating whether Perl would evaluate the SV as true or
|
|
false. See C<L</SvOK>> for a defined/undefined test. Handles 'get' magic
|
|
unless the scalar is already C<SvPOK>, C<SvIOK> or C<SvNOK> (the public, not the
|
|
private flags).
|
|
|
|
This form guarantees to evaluate C<sv> only once. Only use this if C<sv> is an
|
|
expression with side effects, otherwise use the more efficient C<SvTRUE>.
|
|
|
|
bool SvTRUEx(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvTYPE
|
|
X<SvTYPE>
|
|
|
|
Returns the type of the SV. See C<L</svtype>>.
|
|
|
|
svtype SvTYPE(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item sv_unmagic
|
|
X<sv_unmagic>
|
|
|
|
Removes all magic of type C<type> from an SV.
|
|
|
|
int sv_unmagic(SV *const sv, const int type)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_unmagicext
|
|
X<sv_unmagicext>
|
|
|
|
Removes all magic of type C<type> with the specified C<vtbl> from an SV.
|
|
|
|
int sv_unmagicext(SV *const sv, const int type,
|
|
MGVTBL *vtbl)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_unref_flags
|
|
X<sv_unref_flags>
|
|
|
|
Unsets the RV status of the SV, and decrements the reference count of
|
|
whatever was being referenced by the RV. This can almost be thought of
|
|
as a reversal of C<newSVrv>. The C<cflags> argument can contain
|
|
C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
|
|
(otherwise the decrementing is conditional on the reference count being
|
|
different from one or the reference being a readonly SV).
|
|
See C<L</SvROK_off>>.
|
|
|
|
void sv_unref_flags(SV *const ref, const U32 flags)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_untaint
|
|
X<sv_untaint>
|
|
|
|
Untaint an SV. Use C<SvTAINTED_off> instead.
|
|
|
|
void sv_untaint(SV *const sv)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item SvUOK
|
|
X<SvUOK>
|
|
|
|
Returns a boolean indicating whether the SV contains an integer that must be
|
|
interpreted as unsigned. A non-negative integer whose value is within the
|
|
range of both an IV and a UV may be flagged as either C<SvUOK> or C<SvIOK>.
|
|
|
|
bool SvUOK(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvUPGRADE
|
|
X<SvUPGRADE>
|
|
|
|
Used to upgrade an SV to a more complex form. Uses C<sv_upgrade> to
|
|
perform the upgrade if necessary. See C<L</svtype>>.
|
|
|
|
void SvUPGRADE(SV* sv, svtype type)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item sv_upgrade
|
|
X<sv_upgrade>
|
|
|
|
Upgrade an SV to a more complex form. Generally adds a new body type to the
|
|
SV, then copies across as much information as possible from the old body.
|
|
It croaks if the SV is already in a more complex form than requested. You
|
|
generally want to use the C<SvUPGRADE> macro wrapper, which checks the type
|
|
before calling C<sv_upgrade>, and hence does not croak. See also
|
|
C<L</svtype>>.
|
|
|
|
void sv_upgrade(SV *const sv, svtype new_type)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_usepvn_flags
|
|
X<sv_usepvn_flags>
|
|
|
|
Tells an SV to use C<ptr> to find its string value. Normally the
|
|
string is stored inside the SV, but sv_usepvn allows the SV to use an
|
|
outside string. C<ptr> should point to memory that was allocated
|
|
by L<C<Newx>|perlclib/Memory Management and String Handling>. It must be
|
|
the start of a C<Newx>-ed block of memory, and not a pointer to the
|
|
middle of it (beware of L<C<OOK>|perlguts/Offsets> and copy-on-write),
|
|
and not be from a non-C<Newx> memory allocator like C<malloc>. The
|
|
string length, C<len>, must be supplied. By default this function
|
|
will C<Renew> (i.e. realloc, move) the memory pointed to by C<ptr>,
|
|
so that pointer should not be freed or used by the programmer after
|
|
giving it to C<sv_usepvn>, and neither should any pointers from "behind"
|
|
that pointer (e.g. ptr + 1) be used.
|
|
|
|
If S<C<flags & SV_SMAGIC>> is true, will call C<SvSETMAGIC>. If
|
|
S<C<flags & SV_HAS_TRAILING_NUL>> is true, then C<ptr[len]> must be C<NUL>,
|
|
and the realloc
|
|
will be skipped (i.e. the buffer is actually at least 1 byte longer than
|
|
C<len>, and already meets the requirements for storing in C<SvPVX>).
|
|
|
|
void sv_usepvn_flags(SV *const sv, char* ptr,
|
|
const STRLEN len,
|
|
const U32 flags)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item SvUTF8
|
|
X<SvUTF8>
|
|
|
|
Returns a U32 value indicating the UTF-8 status of an SV. If things are set-up
|
|
properly, this indicates whether or not the SV contains UTF-8 encoded data.
|
|
You should use this I<after> a call to C<SvPV()> or one of its variants, in
|
|
case any call to string overloading updates the internal flag.
|
|
|
|
If you want to take into account the L<bytes> pragma, use C<L</DO_UTF8>>
|
|
instead.
|
|
|
|
U32 SvUTF8(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item sv_utf8_decode
|
|
X<sv_utf8_decode>
|
|
|
|
If the PV of the SV is an octet sequence in Perl's extended UTF-8
|
|
and contains a multiple-byte character, the C<SvUTF8> flag is turned on
|
|
so that it looks like a character. If the PV contains only single-byte
|
|
characters, the C<SvUTF8> flag stays off.
|
|
Scans PV for validity and returns FALSE if the PV is invalid UTF-8.
|
|
|
|
bool sv_utf8_decode(SV *const sv)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_utf8_downgrade
|
|
X<sv_utf8_downgrade>
|
|
|
|
Attempts to convert the PV of an SV from characters to bytes.
|
|
If the PV contains a character that cannot fit
|
|
in a byte, this conversion will fail;
|
|
in this case, either returns false or, if C<fail_ok> is not
|
|
true, croaks.
|
|
|
|
This is not a general purpose Unicode to byte encoding interface:
|
|
use the C<Encode> extension for that.
|
|
|
|
This function process get magic on C<sv>.
|
|
|
|
bool sv_utf8_downgrade(SV *const sv,
|
|
const bool fail_ok)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_utf8_downgrade_flags
|
|
X<sv_utf8_downgrade_flags>
|
|
|
|
Like C<sv_utf8_downgrade>, but with additional C<flags>.
|
|
If C<flags> has C<SV_GMAGIC> bit set, processes get magic on C<sv>.
|
|
|
|
bool sv_utf8_downgrade_flags(SV *const sv,
|
|
const bool fail_ok,
|
|
const U32 flags)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_utf8_downgrade_nomg
|
|
X<sv_utf8_downgrade_nomg>
|
|
|
|
Like C<sv_utf8_downgrade>, but does not process get magic on C<sv>.
|
|
|
|
bool sv_utf8_downgrade_nomg(SV *const sv,
|
|
const bool fail_ok)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_utf8_encode
|
|
X<sv_utf8_encode>
|
|
|
|
Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
|
|
flag off so that it looks like octets again.
|
|
|
|
void sv_utf8_encode(SV *const sv)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_utf8_upgrade
|
|
X<sv_utf8_upgrade>
|
|
|
|
Converts the PV of an SV to its UTF-8-encoded form.
|
|
Forces the SV to string form if it is not already.
|
|
Will C<mg_get> on C<sv> if appropriate.
|
|
Always sets the C<SvUTF8> flag to avoid future validity checks even
|
|
if the whole string is the same in UTF-8 as not.
|
|
Returns the number of bytes in the converted string
|
|
|
|
This is not a general purpose byte encoding to Unicode interface:
|
|
use the Encode extension for that.
|
|
|
|
STRLEN sv_utf8_upgrade(SV *sv)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_utf8_upgrade_flags
|
|
X<sv_utf8_upgrade_flags>
|
|
|
|
Converts the PV of an SV to its UTF-8-encoded form.
|
|
Forces the SV to string form if it is not already.
|
|
Always sets the SvUTF8 flag to avoid future validity checks even
|
|
if all the bytes are invariant in UTF-8.
|
|
If C<flags> has C<SV_GMAGIC> bit set,
|
|
will C<mg_get> on C<sv> if appropriate, else not.
|
|
|
|
The C<SV_FORCE_UTF8_UPGRADE> flag is now ignored.
|
|
|
|
Returns the number of bytes in the converted string.
|
|
|
|
This is not a general purpose byte encoding to Unicode interface:
|
|
use the Encode extension for that.
|
|
|
|
STRLEN sv_utf8_upgrade_flags(SV *const sv,
|
|
const I32 flags)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_utf8_upgrade_flags_grow
|
|
X<sv_utf8_upgrade_flags_grow>
|
|
|
|
Like C<sv_utf8_upgrade_flags>, but has an additional parameter C<extra>, which is
|
|
the number of unused bytes the string of C<sv> is guaranteed to have free after
|
|
it upon return. This allows the caller to reserve extra space that it intends
|
|
to fill, to avoid extra grows.
|
|
|
|
C<sv_utf8_upgrade>, C<sv_utf8_upgrade_nomg>, and C<sv_utf8_upgrade_flags>
|
|
are implemented in terms of this function.
|
|
|
|
Returns the number of bytes in the converted string (not including the spares).
|
|
|
|
STRLEN sv_utf8_upgrade_flags_grow(SV *const sv,
|
|
const I32 flags,
|
|
STRLEN extra)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_utf8_upgrade_nomg
|
|
X<sv_utf8_upgrade_nomg>
|
|
|
|
Like C<sv_utf8_upgrade>, but doesn't do magic on C<sv>.
|
|
|
|
STRLEN sv_utf8_upgrade_nomg(SV *sv)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item SvUTF8_off
|
|
X<SvUTF8_off>
|
|
|
|
Unsets the UTF-8 status of an SV (the data is not changed, just the flag).
|
|
Do not use frivolously.
|
|
|
|
void SvUTF8_off(SV *sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvUTF8_on
|
|
X<SvUTF8_on>
|
|
|
|
Turn on the UTF-8 status of an SV (the data is not changed, just the flag).
|
|
Do not use frivolously.
|
|
|
|
void SvUTF8_on(SV *sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvUV
|
|
X<SvUV>
|
|
|
|
Coerces the given SV to UV and returns it. The returned value in many
|
|
circumstances will get stored in C<sv>'s UV slot, but not in all cases. (Use
|
|
C<L</sv_setuv>> to make sure it does).
|
|
|
|
See C<L</SvUVx>> for a version which guarantees to evaluate C<sv> only once.
|
|
|
|
UV SvUV(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvUV_nomg
|
|
X<SvUV_nomg>
|
|
|
|
Like C<SvUV> but doesn't process magic.
|
|
|
|
UV SvUV_nomg(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvUV_set
|
|
X<SvUV_set>
|
|
|
|
Set the value of the UV pointer in C<sv> to val. See C<L</SvIV_set>>.
|
|
|
|
void SvUV_set(SV* sv, UV val)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvUVX
|
|
X<SvUVX>
|
|
|
|
Returns the raw value in the SV's UV slot, without checks or conversions.
|
|
Only use when you are sure C<SvIOK> is true. See also C<L</SvUV>>.
|
|
|
|
UV SvUVX(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvUVx
|
|
X<SvUVx>
|
|
|
|
Coerces the given SV to UV and returns it. The returned value in many
|
|
circumstances will get stored in C<sv>'s UV slot, but not in all cases. (Use
|
|
C<L</sv_setuv>> to make sure it does).
|
|
|
|
This form guarantees to evaluate C<sv> only once. Only use this if C<sv> is an
|
|
expression with side effects, otherwise use the more efficient C<SvUV>.
|
|
|
|
UV SvUVx(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item SvUVXx
|
|
X<SvUVXx>
|
|
|
|
|
|
DEPRECATED! It is planned to remove this function from a
|
|
future release of Perl. Do not use it for new code; remove it from
|
|
existing code.
|
|
|
|
|
|
This is an unnecessary synonym for L</SvUVX>
|
|
|
|
UV SvUVXx(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item sv_vcatpvf
|
|
X<sv_vcatpvf>
|
|
|
|
Processes its arguments like C<sv_vcatpvfn> called with a non-null C-style
|
|
variable argument list, and appends the formatted output
|
|
to an SV. Does not handle 'set' magic. See C<L</sv_vcatpvf_mg>>.
|
|
|
|
Usually used via its frontend C<sv_catpvf>.
|
|
|
|
void sv_vcatpvf(SV *const sv, const char *const pat,
|
|
va_list *const args)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_vcatpvfn
|
|
X<sv_vcatpvfn>
|
|
|
|
void sv_vcatpvfn(SV *const sv, const char *const pat,
|
|
const STRLEN patlen,
|
|
va_list *const args,
|
|
SV **const svargs,
|
|
const Size_t sv_count,
|
|
bool *const maybe_tainted)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_vcatpvfn_flags
|
|
X<sv_vcatpvfn_flags>
|
|
|
|
Processes its arguments like C<vsprintf> and appends the formatted output
|
|
to an SV. Uses an array of SVs if the C-style variable argument list is
|
|
missing (C<NULL>). Argument reordering (using format specifiers like C<%2$d>
|
|
or C<%*2$d>) is supported only when using an array of SVs; using a C-style
|
|
C<va_list> argument list with a format string that uses argument reordering
|
|
will yield an exception.
|
|
|
|
When running with taint checks enabled, indicates via
|
|
C<maybe_tainted> if results are untrustworthy (often due to the use of
|
|
locales).
|
|
|
|
If called as C<sv_vcatpvfn> or flags has the C<SV_GMAGIC> bit set, calls get magic.
|
|
|
|
It assumes that pat has the same utf8-ness as sv. It's the caller's
|
|
responsibility to ensure that this is so.
|
|
|
|
Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
|
|
|
|
void sv_vcatpvfn_flags(SV *const sv,
|
|
const char *const pat,
|
|
const STRLEN patlen,
|
|
va_list *const args,
|
|
SV **const svargs,
|
|
const Size_t sv_count,
|
|
bool *const maybe_tainted,
|
|
const U32 flags)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_vcatpvf_mg
|
|
X<sv_vcatpvf_mg>
|
|
|
|
Like C<sv_vcatpvf>, but also handles 'set' magic.
|
|
|
|
Usually used via its frontend C<sv_catpvf_mg>.
|
|
|
|
void sv_vcatpvf_mg(SV *const sv,
|
|
const char *const pat,
|
|
va_list *const args)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item SvVOK
|
|
X<SvVOK>
|
|
|
|
Returns a boolean indicating whether the SV contains a v-string.
|
|
|
|
bool SvVOK(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file sv.h
|
|
|
|
=item sv_vsetpvf
|
|
X<sv_vsetpvf>
|
|
|
|
Works like C<sv_vcatpvf> but copies the text into the SV instead of
|
|
appending it. Does not handle 'set' magic. See C<L</sv_vsetpvf_mg>>.
|
|
|
|
Usually used via its frontend C<sv_setpvf>.
|
|
|
|
void sv_vsetpvf(SV *const sv, const char *const pat,
|
|
va_list *const args)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_vsetpvfn
|
|
X<sv_vsetpvfn>
|
|
|
|
Works like C<sv_vcatpvfn> but copies the text into the SV instead of
|
|
appending it.
|
|
|
|
Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
|
|
|
|
void sv_vsetpvfn(SV *const sv, const char *const pat,
|
|
const STRLEN patlen,
|
|
va_list *const args,
|
|
SV **const svargs,
|
|
const Size_t sv_count,
|
|
bool *const maybe_tainted)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_vsetpvf_mg
|
|
X<sv_vsetpvf_mg>
|
|
|
|
Like C<sv_vsetpvf>, but also handles 'set' magic.
|
|
|
|
Usually used via its frontend C<sv_setpvf_mg>.
|
|
|
|
void sv_vsetpvf_mg(SV *const sv,
|
|
const char *const pat,
|
|
va_list *const args)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
|
|
=back
|
|
|
|
=head1 Unicode Support
|
|
|
|
L<perlguts/Unicode Support> has an introduction to this API.
|
|
|
|
See also L</Character classification>,
|
|
and L</Character case changing>.
|
|
Various functions outside this section also work specially with Unicode.
|
|
Search for the string "utf8" in this document.
|
|
|
|
|
|
=over 8
|
|
|
|
=item BOM_UTF8
|
|
X<BOM_UTF8>
|
|
|
|
This is a macro that evaluates to a string constant of the UTF-8 bytes that
|
|
define the Unicode BYTE ORDER MARK (U+FEFF) for the platform that perl
|
|
is compiled on. This allows code to use a mnemonic for this character that
|
|
works on both ASCII and EBCDIC platforms.
|
|
S<C<sizeof(BOM_UTF8) - 1>> can be used to get its length in
|
|
bytes.
|
|
|
|
=for hackers
|
|
Found in file unicode_constants.h
|
|
|
|
=item bytes_cmp_utf8
|
|
X<bytes_cmp_utf8>
|
|
|
|
Compares the sequence of characters (stored as octets) in C<b>, C<blen> with the
|
|
sequence of characters (stored as UTF-8)
|
|
in C<u>, C<ulen>. Returns 0 if they are
|
|
equal, -1 or -2 if the first string is less than the second string, +1 or +2
|
|
if the first string is greater than the second string.
|
|
|
|
-1 or +1 is returned if the shorter string was identical to the start of the
|
|
longer string. -2 or +2 is returned if
|
|
there was a difference between characters
|
|
within the strings.
|
|
|
|
int bytes_cmp_utf8(const U8 *b, STRLEN blen,
|
|
const U8 *u, STRLEN ulen)
|
|
|
|
=for hackers
|
|
Found in file utf8.c
|
|
|
|
=item bytes_from_utf8
|
|
X<bytes_from_utf8>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Converts a potentially UTF-8 encoded string C<s> of length C<*lenp> into native
|
|
byte encoding. On input, the boolean C<*is_utf8p> gives whether or not C<s> is
|
|
actually encoded in UTF-8.
|
|
|
|
Unlike L</utf8_to_bytes> but like L</bytes_to_utf8>, this is non-destructive of
|
|
the input string.
|
|
|
|
Do nothing if C<*is_utf8p> is 0, or if there are code points in the string
|
|
not expressible in native byte encoding. In these cases, C<*is_utf8p> and
|
|
C<*lenp> are unchanged, and the return value is the original C<s>.
|
|
|
|
Otherwise, C<*is_utf8p> is set to 0, and the return value is a pointer to a
|
|
newly created string containing a downgraded copy of C<s>, and whose length is
|
|
returned in C<*lenp>, updated. The new string is C<NUL>-terminated. The
|
|
caller is responsible for arranging for the memory used by this string to get
|
|
freed.
|
|
|
|
Upon successful return, the number of variants in the string can be computed by
|
|
having saved the value of C<*lenp> before the call, and subtracting the
|
|
after-call value of C<*lenp> from it.
|
|
|
|
U8* bytes_from_utf8(const U8 *s, STRLEN *lenp,
|
|
bool *is_utf8p)
|
|
|
|
=for hackers
|
|
Found in file utf8.c
|
|
|
|
=item bytes_to_utf8
|
|
X<bytes_to_utf8>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Converts a string C<s> of length C<*lenp> bytes from the native encoding into
|
|
UTF-8.
|
|
Returns a pointer to the newly-created string, and sets C<*lenp> to
|
|
reflect the new length in bytes. The caller is responsible for arranging for
|
|
the memory used by this string to get freed.
|
|
|
|
Upon successful return, the number of variants in the string can be computed by
|
|
having saved the value of C<*lenp> before the call, and subtracting it from the
|
|
after-call value of C<*lenp>.
|
|
|
|
A C<NUL> character will be written after the end of the string.
|
|
|
|
If you want to convert to UTF-8 from encodings other than
|
|
the native (Latin1 or EBCDIC),
|
|
see L</sv_recode_to_utf8>().
|
|
|
|
U8* bytes_to_utf8(const U8 *s, STRLEN *lenp)
|
|
|
|
=for hackers
|
|
Found in file utf8.c
|
|
|
|
=item DO_UTF8
|
|
X<DO_UTF8>
|
|
|
|
Returns a bool giving whether or not the PV in C<sv> is to be treated as being
|
|
encoded in UTF-8.
|
|
|
|
You should use this I<after> a call to C<SvPV()> or one of its variants, in
|
|
case any call to string overloading updates the internal UTF-8 encoding flag.
|
|
|
|
bool DO_UTF8(SV* sv)
|
|
|
|
=for hackers
|
|
Found in file utf8.h
|
|
|
|
=item foldEQ_utf8
|
|
X<foldEQ_utf8>
|
|
|
|
Returns true if the leading portions of the strings C<s1> and C<s2> (either or
|
|
both of which may be in UTF-8) are the same case-insensitively; false
|
|
otherwise. How far into the strings to compare is determined by other input
|
|
parameters.
|
|
|
|
If C<u1> is true, the string C<s1> is assumed to be in UTF-8-encoded Unicode;
|
|
otherwise it is assumed to be in native 8-bit encoding. Correspondingly for
|
|
C<u2> with respect to C<s2>.
|
|
|
|
If the byte length C<l1> is non-zero, it says how far into C<s1> to check for
|
|
fold equality. In other words, C<s1>+C<l1> will be used as a goal to reach.
|
|
The scan will not be considered to be a match unless the goal is reached, and
|
|
scanning won't continue past that goal. Correspondingly for C<l2> with respect
|
|
to C<s2>.
|
|
|
|
If C<pe1> is non-C<NULL> and the pointer it points to is not C<NULL>, that
|
|
pointer is considered an end pointer to the position 1 byte past the maximum
|
|
point in C<s1> beyond which scanning will not continue under any circumstances.
|
|
(This routine assumes that UTF-8 encoded input strings are not malformed;
|
|
malformed input can cause it to read past C<pe1>). This means that if both
|
|
C<l1> and C<pe1> are specified, and C<pe1> is less than C<s1>+C<l1>, the match
|
|
will never be successful because it can never
|
|
get as far as its goal (and in fact is asserted against). Correspondingly for
|
|
C<pe2> with respect to C<s2>.
|
|
|
|
At least one of C<s1> and C<s2> must have a goal (at least one of C<l1> and
|
|
C<l2> must be non-zero), and if both do, both have to be
|
|
reached for a successful match. Also, if the fold of a character is multiple
|
|
characters, all of them must be matched (see tr21 reference below for
|
|
'folding').
|
|
|
|
Upon a successful match, if C<pe1> is non-C<NULL>,
|
|
it will be set to point to the beginning of the I<next> character of C<s1>
|
|
beyond what was matched. Correspondingly for C<pe2> and C<s2>.
|
|
|
|
For case-insensitiveness, the "casefolding" of Unicode is used
|
|
instead of upper/lowercasing both the characters, see
|
|
L<https://www.unicode.org/unicode/reports/tr21/> (Case Mappings).
|
|
|
|
I32 foldEQ_utf8(const char *s1, char **pe1, UV l1,
|
|
bool u1, const char *s2, char **pe2,
|
|
UV l2, bool u2)
|
|
|
|
=for hackers
|
|
Found in file utf8.c
|
|
|
|
=item is_ascii_string
|
|
X<is_ascii_string>
|
|
|
|
This is a misleadingly-named synonym for L</is_utf8_invariant_string>.
|
|
On ASCII-ish platforms, the name isn't misleading: the ASCII-range characters
|
|
are exactly the UTF-8 invariants. But EBCDIC machines have more invariants
|
|
than just the ASCII characters, so C<is_utf8_invariant_string> is preferred.
|
|
|
|
bool is_ascii_string(const U8* const s, STRLEN len)
|
|
|
|
=for hackers
|
|
Found in file utf8.h
|
|
|
|
=item is_c9strict_utf8_string
|
|
X<is_c9strict_utf8_string>
|
|
|
|
Returns TRUE if the first C<len> bytes of string C<s> form a valid
|
|
UTF-8-encoded string that conforms to
|
|
L<Unicode Corrigendum #9|http://www.unicode.org/versions/corrigendum9.html>;
|
|
otherwise it returns FALSE. If C<len> is 0, it will be calculated using
|
|
C<strlen(s)> (which means if you use this option, that C<s> can't have embedded
|
|
C<NUL> characters and has to have a terminating C<NUL> byte). Note that all
|
|
characters being ASCII constitute 'a valid UTF-8 string'.
|
|
|
|
This function returns FALSE for strings containing any code points above the
|
|
Unicode max of 0x10FFFF or surrogate code points, but accepts non-character
|
|
code points per
|
|
L<Corrigendum #9|http://www.unicode.org/versions/corrigendum9.html>.
|
|
|
|
See also
|
|
C<L</is_utf8_invariant_string>>,
|
|
C<L</is_utf8_invariant_string_loc>>,
|
|
C<L</is_utf8_string>>,
|
|
C<L</is_utf8_string_flags>>,
|
|
C<L</is_utf8_string_loc>>,
|
|
C<L</is_utf8_string_loc_flags>>,
|
|
C<L</is_utf8_string_loclen>>,
|
|
C<L</is_utf8_string_loclen_flags>>,
|
|
C<L</is_utf8_fixed_width_buf_flags>>,
|
|
C<L</is_utf8_fixed_width_buf_loc_flags>>,
|
|
C<L</is_utf8_fixed_width_buf_loclen_flags>>,
|
|
C<L</is_strict_utf8_string>>,
|
|
C<L</is_strict_utf8_string_loc>>,
|
|
C<L</is_strict_utf8_string_loclen>>,
|
|
C<L</is_c9strict_utf8_string_loc>>,
|
|
and
|
|
C<L</is_c9strict_utf8_string_loclen>>.
|
|
|
|
bool is_c9strict_utf8_string(const U8 *s, STRLEN len)
|
|
|
|
=for hackers
|
|
Found in file inline.h
|
|
|
|
=item is_c9strict_utf8_string_loc
|
|
X<is_c9strict_utf8_string_loc>
|
|
|
|
Like C<L</is_c9strict_utf8_string>> but stores the location of the failure (in
|
|
the case of "utf8ness failure") or the location C<s>+C<len> (in the case of
|
|
"utf8ness success") in the C<ep> pointer.
|
|
|
|
See also C<L</is_c9strict_utf8_string_loclen>>.
|
|
|
|
bool is_c9strict_utf8_string_loc(const U8 *s,
|
|
STRLEN len,
|
|
const U8 **ep)
|
|
|
|
=for hackers
|
|
Found in file inline.h
|
|
|
|
=item is_c9strict_utf8_string_loclen
|
|
X<is_c9strict_utf8_string_loclen>
|
|
|
|
Like C<L</is_c9strict_utf8_string>> but stores the location of the failure (in
|
|
the case of "utf8ness failure") or the location C<s>+C<len> (in the case of
|
|
"utf8ness success") in the C<ep> pointer, and the number of UTF-8 encoded
|
|
characters in the C<el> pointer.
|
|
|
|
See also C<L</is_c9strict_utf8_string_loc>>.
|
|
|
|
bool is_c9strict_utf8_string_loclen(const U8 *s,
|
|
STRLEN len,
|
|
const U8 **ep,
|
|
STRLEN *el)
|
|
|
|
=for hackers
|
|
Found in file inline.h
|
|
|
|
=item isC9_STRICT_UTF8_CHAR
|
|
X<isC9_STRICT_UTF8_CHAR>
|
|
|
|
Evaluates to non-zero if the first few bytes of the string starting at C<s> and
|
|
looking no further than S<C<e - 1>> are well-formed UTF-8 that represents some
|
|
Unicode non-surrogate code point; otherwise it evaluates to 0. If non-zero,
|
|
the value gives how many bytes starting at C<s> comprise the code point's
|
|
representation. Any bytes remaining before C<e>, but beyond the ones needed to
|
|
form the first code point in C<s>, are not examined.
|
|
|
|
The largest acceptable code point is the Unicode maximum 0x10FFFF. This
|
|
differs from C<L</isSTRICT_UTF8_CHAR>> only in that it accepts non-character
|
|
code points. This corresponds to
|
|
L<Unicode Corrigendum #9|http://www.unicode.org/versions/corrigendum9.html>.
|
|
which said that non-character code points are merely discouraged rather than
|
|
completely forbidden in open interchange. See
|
|
L<perlunicode/Noncharacter code points>.
|
|
|
|
Use C<L</isUTF8_CHAR>> to check for Perl's extended UTF-8; and
|
|
C<L</isUTF8_CHAR_flags>> for a more customized definition.
|
|
|
|
Use C<L</is_c9strict_utf8_string>>, C<L</is_c9strict_utf8_string_loc>>, and
|
|
C<L</is_c9strict_utf8_string_loclen>> to check entire strings.
|
|
|
|
Size_t isC9_STRICT_UTF8_CHAR(const U8 * const s0,
|
|
const U8 * const e)
|
|
|
|
=for hackers
|
|
Found in file inline.h
|
|
|
|
=item is_invariant_string
|
|
X<is_invariant_string>
|
|
|
|
This is a somewhat misleadingly-named synonym for L</is_utf8_invariant_string>.
|
|
C<is_utf8_invariant_string> is preferred, as it indicates under what conditions
|
|
the string is invariant.
|
|
|
|
bool is_invariant_string(const U8* const s,
|
|
STRLEN len)
|
|
|
|
=for hackers
|
|
Found in file utf8.h
|
|
|
|
=item isSTRICT_UTF8_CHAR
|
|
X<isSTRICT_UTF8_CHAR>
|
|
|
|
Evaluates to non-zero if the first few bytes of the string starting at C<s> and
|
|
looking no further than S<C<e - 1>> are well-formed UTF-8 that represents some
|
|
Unicode code point completely acceptable for open interchange between all
|
|
applications; otherwise it evaluates to 0. If non-zero, the value gives how
|
|
many bytes starting at C<s> comprise the code point's representation. Any
|
|
bytes remaining before C<e>, but beyond the ones needed to form the first code
|
|
point in C<s>, are not examined.
|
|
|
|
The largest acceptable code point is the Unicode maximum 0x10FFFF, and must not
|
|
be a surrogate nor a non-character code point. Thus this excludes any code
|
|
point from Perl's extended UTF-8.
|
|
|
|
This is used to efficiently decide if the next few bytes in C<s> is
|
|
legal Unicode-acceptable UTF-8 for a single character.
|
|
|
|
Use C<L</isC9_STRICT_UTF8_CHAR>> to use the L<Unicode Corrigendum
|
|
#9|http://www.unicode.org/versions/corrigendum9.html> definition of allowable
|
|
code points; C<L</isUTF8_CHAR>> to check for Perl's extended UTF-8;
|
|
and C<L</isUTF8_CHAR_flags>> for a more customized definition.
|
|
|
|
Use C<L</is_strict_utf8_string>>, C<L</is_strict_utf8_string_loc>>, and
|
|
C<L</is_strict_utf8_string_loclen>> to check entire strings.
|
|
|
|
Size_t isSTRICT_UTF8_CHAR(const U8 * const s0,
|
|
const U8 * const e)
|
|
|
|
=for hackers
|
|
Found in file inline.h
|
|
|
|
=item is_strict_utf8_string
|
|
X<is_strict_utf8_string>
|
|
|
|
Returns TRUE if the first C<len> bytes of string C<s> form a valid
|
|
UTF-8-encoded string that is fully interchangeable by any application using
|
|
Unicode rules; otherwise it returns FALSE. If C<len> is 0, it will be
|
|
calculated using C<strlen(s)> (which means if you use this option, that C<s>
|
|
can't have embedded C<NUL> characters and has to have a terminating C<NUL>
|
|
byte). Note that all characters being ASCII constitute 'a valid UTF-8 string'.
|
|
|
|
This function returns FALSE for strings containing any
|
|
code points above the Unicode max of 0x10FFFF, surrogate code points, or
|
|
non-character code points.
|
|
|
|
See also
|
|
C<L</is_utf8_invariant_string>>,
|
|
C<L</is_utf8_invariant_string_loc>>,
|
|
C<L</is_utf8_string>>,
|
|
C<L</is_utf8_string_flags>>,
|
|
C<L</is_utf8_string_loc>>,
|
|
C<L</is_utf8_string_loc_flags>>,
|
|
C<L</is_utf8_string_loclen>>,
|
|
C<L</is_utf8_string_loclen_flags>>,
|
|
C<L</is_utf8_fixed_width_buf_flags>>,
|
|
C<L</is_utf8_fixed_width_buf_loc_flags>>,
|
|
C<L</is_utf8_fixed_width_buf_loclen_flags>>,
|
|
C<L</is_strict_utf8_string_loc>>,
|
|
C<L</is_strict_utf8_string_loclen>>,
|
|
C<L</is_c9strict_utf8_string>>,
|
|
C<L</is_c9strict_utf8_string_loc>>,
|
|
and
|
|
C<L</is_c9strict_utf8_string_loclen>>.
|
|
|
|
bool is_strict_utf8_string(const U8 *s, STRLEN len)
|
|
|
|
=for hackers
|
|
Found in file inline.h
|
|
|
|
=item is_strict_utf8_string_loc
|
|
X<is_strict_utf8_string_loc>
|
|
|
|
Like C<L</is_strict_utf8_string>> but stores the location of the failure (in the
|
|
case of "utf8ness failure") or the location C<s>+C<len> (in the case of
|
|
"utf8ness success") in the C<ep> pointer.
|
|
|
|
See also C<L</is_strict_utf8_string_loclen>>.
|
|
|
|
bool is_strict_utf8_string_loc(const U8 *s,
|
|
STRLEN len,
|
|
const U8 **ep)
|
|
|
|
=for hackers
|
|
Found in file inline.h
|
|
|
|
=item is_strict_utf8_string_loclen
|
|
X<is_strict_utf8_string_loclen>
|
|
|
|
Like C<L</is_strict_utf8_string>> but stores the location of the failure (in the
|
|
case of "utf8ness failure") or the location C<s>+C<len> (in the case of
|
|
"utf8ness success") in the C<ep> pointer, and the number of UTF-8
|
|
encoded characters in the C<el> pointer.
|
|
|
|
See also C<L</is_strict_utf8_string_loc>>.
|
|
|
|
bool is_strict_utf8_string_loclen(const U8 *s,
|
|
STRLEN len,
|
|
const U8 **ep,
|
|
STRLEN *el)
|
|
|
|
=for hackers
|
|
Found in file inline.h
|
|
|
|
=item is_utf8_fixed_width_buf_flags
|
|
X<is_utf8_fixed_width_buf_flags>
|
|
|
|
Returns TRUE if the fixed-width buffer starting at C<s> with length C<len>
|
|
is entirely valid UTF-8, subject to the restrictions given by C<flags>;
|
|
otherwise it returns FALSE.
|
|
|
|
If C<flags> is 0, any well-formed UTF-8, as extended by Perl, is accepted
|
|
without restriction. If the final few bytes of the buffer do not form a
|
|
complete code point, this will return TRUE anyway, provided that
|
|
C<L</is_utf8_valid_partial_char_flags>> returns TRUE for them.
|
|
|
|
If C<flags> in non-zero, it can be any combination of the
|
|
C<UTF8_DISALLOW_I<foo>> flags accepted by C<L</utf8n_to_uvchr>>, and with the
|
|
same meanings.
|
|
|
|
This function differs from C<L</is_utf8_string_flags>> only in that the latter
|
|
returns FALSE if the final few bytes of the string don't form a complete code
|
|
point.
|
|
|
|
bool is_utf8_fixed_width_buf_flags(
|
|
const U8 * const s, STRLEN len,
|
|
const U32 flags
|
|
)
|
|
|
|
=for hackers
|
|
Found in file inline.h
|
|
|
|
=item is_utf8_fixed_width_buf_loclen_flags
|
|
X<is_utf8_fixed_width_buf_loclen_flags>
|
|
|
|
Like C<L</is_utf8_fixed_width_buf_loc_flags>> but stores the number of
|
|
complete, valid characters found in the C<el> pointer.
|
|
|
|
bool is_utf8_fixed_width_buf_loclen_flags(
|
|
const U8 * const s, STRLEN len,
|
|
const U8 **ep, STRLEN *el, const U32 flags
|
|
)
|
|
|
|
=for hackers
|
|
Found in file inline.h
|
|
|
|
=item is_utf8_fixed_width_buf_loc_flags
|
|
X<is_utf8_fixed_width_buf_loc_flags>
|
|
|
|
Like C<L</is_utf8_fixed_width_buf_flags>> but stores the location of the
|
|
failure in the C<ep> pointer. If the function returns TRUE, C<*ep> will point
|
|
to the beginning of any partial character at the end of the buffer; if there is
|
|
no partial character C<*ep> will contain C<s>+C<len>.
|
|
|
|
See also C<L</is_utf8_fixed_width_buf_loclen_flags>>.
|
|
|
|
bool is_utf8_fixed_width_buf_loc_flags(
|
|
const U8 * const s, STRLEN len,
|
|
const U8 **ep, const U32 flags
|
|
)
|
|
|
|
=for hackers
|
|
Found in file inline.h
|
|
|
|
=item is_utf8_invariant_string
|
|
X<is_utf8_invariant_string>
|
|
|
|
Returns TRUE if the first C<len> bytes of the string C<s> are the same
|
|
regardless of the UTF-8 encoding of the string (or UTF-EBCDIC encoding on
|
|
EBCDIC machines); otherwise it returns FALSE. That is, it returns TRUE if they
|
|
are UTF-8 invariant. On ASCII-ish machines, all the ASCII characters and only
|
|
the ASCII characters fit this definition. On EBCDIC machines, the ASCII-range
|
|
characters are invariant, but so also are the C1 controls.
|
|
|
|
If C<len> is 0, it will be calculated using C<strlen(s)>, (which means if you
|
|
use this option, that C<s> can't have embedded C<NUL> characters and has to
|
|
have a terminating C<NUL> byte).
|
|
|
|
See also
|
|
C<L</is_utf8_string>>,
|
|
C<L</is_utf8_string_flags>>,
|
|
C<L</is_utf8_string_loc>>,
|
|
C<L</is_utf8_string_loc_flags>>,
|
|
C<L</is_utf8_string_loclen>>,
|
|
C<L</is_utf8_string_loclen_flags>>,
|
|
C<L</is_utf8_fixed_width_buf_flags>>,
|
|
C<L</is_utf8_fixed_width_buf_loc_flags>>,
|
|
C<L</is_utf8_fixed_width_buf_loclen_flags>>,
|
|
C<L</is_strict_utf8_string>>,
|
|
C<L</is_strict_utf8_string_loc>>,
|
|
C<L</is_strict_utf8_string_loclen>>,
|
|
C<L</is_c9strict_utf8_string>>,
|
|
C<L</is_c9strict_utf8_string_loc>>,
|
|
and
|
|
C<L</is_c9strict_utf8_string_loclen>>.
|
|
|
|
bool is_utf8_invariant_string(const U8* const s,
|
|
STRLEN len)
|
|
|
|
=for hackers
|
|
Found in file inline.h
|
|
|
|
=item is_utf8_invariant_string_loc
|
|
X<is_utf8_invariant_string_loc>
|
|
|
|
Like C<L</is_utf8_invariant_string>> but upon failure, stores the location of
|
|
the first UTF-8 variant character in the C<ep> pointer; if all characters are
|
|
UTF-8 invariant, this function does not change the contents of C<*ep>.
|
|
|
|
bool is_utf8_invariant_string_loc(const U8* const s,
|
|
STRLEN len,
|
|
const U8 ** ep)
|
|
|
|
=for hackers
|
|
Found in file inline.h
|
|
|
|
=item is_utf8_string
|
|
X<is_utf8_string>
|
|
|
|
Returns TRUE if the first C<len> bytes of string C<s> form a valid
|
|
Perl-extended-UTF-8 string; returns FALSE otherwise. If C<len> is 0, it will
|
|
be calculated using C<strlen(s)> (which means if you use this option, that C<s>
|
|
can't have embedded C<NUL> characters and has to have a terminating C<NUL>
|
|
byte). Note that all characters being ASCII constitute 'a valid UTF-8 string'.
|
|
|
|
This function considers Perl's extended UTF-8 to be valid. That means that
|
|
code points above Unicode, surrogates, and non-character code points are
|
|
considered valid by this function. Use C<L</is_strict_utf8_string>>,
|
|
C<L</is_c9strict_utf8_string>>, or C<L</is_utf8_string_flags>> to restrict what
|
|
code points are considered valid.
|
|
|
|
See also
|
|
C<L</is_utf8_invariant_string>>,
|
|
C<L</is_utf8_invariant_string_loc>>,
|
|
C<L</is_utf8_string_loc>>,
|
|
C<L</is_utf8_string_loclen>>,
|
|
C<L</is_utf8_fixed_width_buf_flags>>,
|
|
C<L</is_utf8_fixed_width_buf_loc_flags>>,
|
|
C<L</is_utf8_fixed_width_buf_loclen_flags>>,
|
|
|
|
bool is_utf8_string(const U8 *s, STRLEN len)
|
|
|
|
=for hackers
|
|
Found in file inline.h
|
|
|
|
=item is_utf8_string_flags
|
|
X<is_utf8_string_flags>
|
|
|
|
Returns TRUE if the first C<len> bytes of string C<s> form a valid
|
|
UTF-8 string, subject to the restrictions imposed by C<flags>;
|
|
returns FALSE otherwise. If C<len> is 0, it will be calculated
|
|
using C<strlen(s)> (which means if you use this option, that C<s> can't have
|
|
embedded C<NUL> characters and has to have a terminating C<NUL> byte). Note
|
|
that all characters being ASCII constitute 'a valid UTF-8 string'.
|
|
|
|
If C<flags> is 0, this gives the same results as C<L</is_utf8_string>>; if
|
|
C<flags> is C<UTF8_DISALLOW_ILLEGAL_INTERCHANGE>, this gives the same results
|
|
as C<L</is_strict_utf8_string>>; and if C<flags> is
|
|
C<UTF8_DISALLOW_ILLEGAL_C9_INTERCHANGE>, this gives the same results as
|
|
C<L</is_c9strict_utf8_string>>. Otherwise C<flags> may be any
|
|
combination of the C<UTF8_DISALLOW_I<foo>> flags understood by
|
|
C<L</utf8n_to_uvchr>>, with the same meanings.
|
|
|
|
See also
|
|
C<L</is_utf8_invariant_string>>,
|
|
C<L</is_utf8_invariant_string_loc>>,
|
|
C<L</is_utf8_string>>,
|
|
C<L</is_utf8_string_loc>>,
|
|
C<L</is_utf8_string_loc_flags>>,
|
|
C<L</is_utf8_string_loclen>>,
|
|
C<L</is_utf8_string_loclen_flags>>,
|
|
C<L</is_utf8_fixed_width_buf_flags>>,
|
|
C<L</is_utf8_fixed_width_buf_loc_flags>>,
|
|
C<L</is_utf8_fixed_width_buf_loclen_flags>>,
|
|
C<L</is_strict_utf8_string>>,
|
|
C<L</is_strict_utf8_string_loc>>,
|
|
C<L</is_strict_utf8_string_loclen>>,
|
|
C<L</is_c9strict_utf8_string>>,
|
|
C<L</is_c9strict_utf8_string_loc>>,
|
|
and
|
|
C<L</is_c9strict_utf8_string_loclen>>.
|
|
|
|
bool is_utf8_string_flags(const U8 *s, STRLEN len,
|
|
const U32 flags)
|
|
|
|
=for hackers
|
|
Found in file inline.h
|
|
|
|
=item is_utf8_string_loc
|
|
X<is_utf8_string_loc>
|
|
|
|
Like C<L</is_utf8_string>> but stores the location of the failure (in the
|
|
case of "utf8ness failure") or the location C<s>+C<len> (in the case of
|
|
"utf8ness success") in the C<ep> pointer.
|
|
|
|
See also C<L</is_utf8_string_loclen>>.
|
|
|
|
bool is_utf8_string_loc(const U8 *s,
|
|
const STRLEN len,
|
|
const U8 **ep)
|
|
|
|
=for hackers
|
|
Found in file inline.h
|
|
|
|
=item is_utf8_string_loclen
|
|
X<is_utf8_string_loclen>
|
|
|
|
Like C<L</is_utf8_string>> but stores the location of the failure (in the
|
|
case of "utf8ness failure") or the location C<s>+C<len> (in the case of
|
|
"utf8ness success") in the C<ep> pointer, and the number of UTF-8
|
|
encoded characters in the C<el> pointer.
|
|
|
|
See also C<L</is_utf8_string_loc>>.
|
|
|
|
bool is_utf8_string_loclen(const U8 *s, STRLEN len,
|
|
const U8 **ep, STRLEN *el)
|
|
|
|
=for hackers
|
|
Found in file inline.h
|
|
|
|
=item is_utf8_string_loclen_flags
|
|
X<is_utf8_string_loclen_flags>
|
|
|
|
Like C<L</is_utf8_string_flags>> but stores the location of the failure (in the
|
|
case of "utf8ness failure") or the location C<s>+C<len> (in the case of
|
|
"utf8ness success") in the C<ep> pointer, and the number of UTF-8
|
|
encoded characters in the C<el> pointer.
|
|
|
|
See also C<L</is_utf8_string_loc_flags>>.
|
|
|
|
bool is_utf8_string_loclen_flags(const U8 *s,
|
|
STRLEN len,
|
|
const U8 **ep,
|
|
STRLEN *el,
|
|
const U32 flags)
|
|
|
|
=for hackers
|
|
Found in file inline.h
|
|
|
|
=item is_utf8_string_loc_flags
|
|
X<is_utf8_string_loc_flags>
|
|
|
|
Like C<L</is_utf8_string_flags>> but stores the location of the failure (in the
|
|
case of "utf8ness failure") or the location C<s>+C<len> (in the case of
|
|
"utf8ness success") in the C<ep> pointer.
|
|
|
|
See also C<L</is_utf8_string_loclen_flags>>.
|
|
|
|
bool is_utf8_string_loc_flags(const U8 *s,
|
|
STRLEN len,
|
|
const U8 **ep,
|
|
const U32 flags)
|
|
|
|
=for hackers
|
|
Found in file inline.h
|
|
|
|
=item is_utf8_valid_partial_char
|
|
X<is_utf8_valid_partial_char>
|
|
|
|
Returns 0 if the sequence of bytes starting at C<s> and looking no further than
|
|
S<C<e - 1>> is the UTF-8 encoding, as extended by Perl, for one or more code
|
|
points. Otherwise, it returns 1 if there exists at least one non-empty
|
|
sequence of bytes that when appended to sequence C<s>, starting at position
|
|
C<e> causes the entire sequence to be the well-formed UTF-8 of some code point;
|
|
otherwise returns 0.
|
|
|
|
In other words this returns TRUE if C<s> points to a partial UTF-8-encoded code
|
|
point.
|
|
|
|
This is useful when a fixed-length buffer is being tested for being well-formed
|
|
UTF-8, but the final few bytes in it don't comprise a full character; that is,
|
|
it is split somewhere in the middle of the final code point's UTF-8
|
|
representation. (Presumably when the buffer is refreshed with the next chunk
|
|
of data, the new first bytes will complete the partial code point.) This
|
|
function is used to verify that the final bytes in the current buffer are in
|
|
fact the legal beginning of some code point, so that if they aren't, the
|
|
failure can be signalled without having to wait for the next read.
|
|
|
|
bool is_utf8_valid_partial_char(const U8 * const s,
|
|
const U8 * const e)
|
|
|
|
=for hackers
|
|
Found in file inline.h
|
|
|
|
=item is_utf8_valid_partial_char_flags
|
|
X<is_utf8_valid_partial_char_flags>
|
|
|
|
Like C<L</is_utf8_valid_partial_char>>, it returns a boolean giving whether
|
|
or not the input is a valid UTF-8 encoded partial character, but it takes an
|
|
extra parameter, C<flags>, which can further restrict which code points are
|
|
considered valid.
|
|
|
|
If C<flags> is 0, this behaves identically to
|
|
C<L</is_utf8_valid_partial_char>>. Otherwise C<flags> can be any combination
|
|
of the C<UTF8_DISALLOW_I<foo>> flags accepted by C<L</utf8n_to_uvchr>>. If
|
|
there is any sequence of bytes that can complete the input partial character in
|
|
such a way that a non-prohibited character is formed, the function returns
|
|
TRUE; otherwise FALSE. Non character code points cannot be determined based on
|
|
partial character input. But many of the other possible excluded types can be
|
|
determined from just the first one or two bytes.
|
|
|
|
bool is_utf8_valid_partial_char_flags(
|
|
const U8 * const s, const U8 * const e,
|
|
const U32 flags
|
|
)
|
|
|
|
=for hackers
|
|
Found in file inline.h
|
|
|
|
=item isUTF8_CHAR
|
|
X<isUTF8_CHAR>
|
|
|
|
Evaluates to non-zero if the first few bytes of the string starting at C<s> and
|
|
looking no further than S<C<e - 1>> are well-formed UTF-8, as extended by Perl,
|
|
that represents some code point; otherwise it evaluates to 0. If non-zero, the
|
|
value gives how many bytes starting at C<s> comprise the code point's
|
|
representation. Any bytes remaining before C<e>, but beyond the ones needed to
|
|
form the first code point in C<s>, are not examined.
|
|
|
|
The code point can be any that will fit in an IV on this machine, using Perl's
|
|
extension to official UTF-8 to represent those higher than the Unicode maximum
|
|
of 0x10FFFF. That means that this macro is used to efficiently decide if the
|
|
next few bytes in C<s> is legal UTF-8 for a single character.
|
|
|
|
Use C<L</isSTRICT_UTF8_CHAR>> to restrict the acceptable code points to those
|
|
defined by Unicode to be fully interchangeable across applications;
|
|
C<L</isC9_STRICT_UTF8_CHAR>> to use the L<Unicode Corrigendum
|
|
#9|http://www.unicode.org/versions/corrigendum9.html> definition of allowable
|
|
code points; and C<L</isUTF8_CHAR_flags>> for a more customized definition.
|
|
|
|
Use C<L</is_utf8_string>>, C<L</is_utf8_string_loc>>, and
|
|
C<L</is_utf8_string_loclen>> to check entire strings.
|
|
|
|
Note also that a UTF-8 "invariant" character (i.e. ASCII on non-EBCDIC
|
|
machines) is a valid UTF-8 character.
|
|
|
|
Size_t isUTF8_CHAR(const U8 * const s0,
|
|
const U8 * const e)
|
|
|
|
=for hackers
|
|
Found in file inline.h
|
|
|
|
=item isUTF8_CHAR_flags
|
|
X<isUTF8_CHAR_flags>
|
|
|
|
Evaluates to non-zero if the first few bytes of the string starting at C<s> and
|
|
looking no further than S<C<e - 1>> are well-formed UTF-8, as extended by Perl,
|
|
that represents some code point, subject to the restrictions given by C<flags>;
|
|
otherwise it evaluates to 0. If non-zero, the value gives how many bytes
|
|
starting at C<s> comprise the code point's representation. Any bytes remaining
|
|
before C<e>, but beyond the ones needed to form the first code point in C<s>,
|
|
are not examined.
|
|
|
|
If C<flags> is 0, this gives the same results as C<L</isUTF8_CHAR>>;
|
|
if C<flags> is C<UTF8_DISALLOW_ILLEGAL_INTERCHANGE>, this gives the same results
|
|
as C<L</isSTRICT_UTF8_CHAR>>;
|
|
and if C<flags> is C<UTF8_DISALLOW_ILLEGAL_C9_INTERCHANGE>, this gives
|
|
the same results as C<L</isC9_STRICT_UTF8_CHAR>>.
|
|
Otherwise C<flags> may be any combination of the C<UTF8_DISALLOW_I<foo>> flags
|
|
understood by C<L</utf8n_to_uvchr>>, with the same meanings.
|
|
|
|
The three alternative macros are for the most commonly needed validations; they
|
|
are likely to run somewhat faster than this more general one, as they can be
|
|
inlined into your code.
|
|
|
|
Use L</is_utf8_string_flags>, L</is_utf8_string_loc_flags>, and
|
|
L</is_utf8_string_loclen_flags> to check entire strings.
|
|
|
|
STRLEN isUTF8_CHAR_flags(const U8 *s, const U8 *e,
|
|
const U32 flags)
|
|
|
|
=for hackers
|
|
Found in file utf8.h
|
|
|
|
=item LATIN1_TO_NATIVE
|
|
X<LATIN1_TO_NATIVE>
|
|
|
|
Returns the native equivalent of the input Latin-1 code point (including ASCII
|
|
and control characters) given by C<ch>. Thus, C<LATIN1_TO_NATIVE(66)> on
|
|
EBCDIC platforms returns 194. These each represent the character C<"B"> on
|
|
their respective platforms. On ASCII platforms no conversion is needed, so
|
|
this macro expands to just its input, adding no time nor space requirements to
|
|
the implementation.
|
|
|
|
For conversion of code points potentially larger than will fit in a character,
|
|
use L</UNI_TO_NATIVE>.
|
|
|
|
U8 LATIN1_TO_NATIVE(U8 ch)
|
|
|
|
=for hackers
|
|
Found in file utf8.h
|
|
|
|
=item NATIVE_TO_LATIN1
|
|
X<NATIVE_TO_LATIN1>
|
|
|
|
Returns the Latin-1 (including ASCII and control characters) equivalent of the
|
|
input native code point given by C<ch>. Thus, C<NATIVE_TO_LATIN1(193)> on
|
|
EBCDIC platforms returns 65. These each represent the character C<"A"> on
|
|
their respective platforms. On ASCII platforms no conversion is needed, so
|
|
this macro expands to just its input, adding no time nor space requirements to
|
|
the implementation.
|
|
|
|
For conversion of code points potentially larger than will fit in a character,
|
|
use L</NATIVE_TO_UNI>.
|
|
|
|
U8 NATIVE_TO_LATIN1(U8 ch)
|
|
|
|
=for hackers
|
|
Found in file utf8.h
|
|
|
|
=item NATIVE_TO_UNI
|
|
X<NATIVE_TO_UNI>
|
|
|
|
Returns the Unicode equivalent of the input native code point given by C<ch>.
|
|
Thus, C<NATIVE_TO_UNI(195)> on EBCDIC platforms returns 67. These each
|
|
represent the character C<"C"> on their respective platforms. On ASCII
|
|
platforms no conversion is needed, so this macro expands to just its input,
|
|
adding no time nor space requirements to the implementation.
|
|
|
|
UV NATIVE_TO_UNI(UV ch)
|
|
|
|
=for hackers
|
|
Found in file utf8.h
|
|
|
|
=item pv_uni_display
|
|
X<pv_uni_display>
|
|
|
|
Build to the scalar C<dsv> a displayable version of the UTF-8 encoded string
|
|
C<spv>, length C<len>, the displayable version being at most C<pvlim> bytes
|
|
long (if longer, the rest is truncated and C<"..."> will be appended).
|
|
|
|
The C<flags> argument can have C<UNI_DISPLAY_ISPRINT> set to display
|
|
C<isPRINT()>able characters as themselves, C<UNI_DISPLAY_BACKSLASH>
|
|
to display the C<\\[nrfta\\]> as the backslashed versions (like C<"\n">)
|
|
(C<UNI_DISPLAY_BACKSLASH> is preferred over C<UNI_DISPLAY_ISPRINT> for C<"\\">).
|
|
C<UNI_DISPLAY_QQ> (and its alias C<UNI_DISPLAY_REGEX>) have both
|
|
C<UNI_DISPLAY_BACKSLASH> and C<UNI_DISPLAY_ISPRINT> turned on.
|
|
|
|
Additionally, there is now C<UNI_DISPLAY_BACKSPACE> which allows C<\b> for a
|
|
backspace, but only when C<UNI_DISPLAY_BACKSLASH> also is set.
|
|
|
|
The pointer to the PV of the C<dsv> is returned.
|
|
|
|
See also L</sv_uni_display>.
|
|
|
|
char* pv_uni_display(SV *dsv, const U8 *spv,
|
|
STRLEN len, STRLEN pvlim,
|
|
UV flags)
|
|
|
|
=for hackers
|
|
Found in file utf8.c
|
|
|
|
=item REPLACEMENT_CHARACTER_UTF8
|
|
X<REPLACEMENT_CHARACTER_UTF8>
|
|
|
|
This is a macro that evaluates to a string constant of the UTF-8 bytes that
|
|
define the Unicode REPLACEMENT CHARACTER (U+FFFD) for the platform that perl
|
|
is compiled on. This allows code to use a mnemonic for this character that
|
|
works on both ASCII and EBCDIC platforms.
|
|
S<C<sizeof(REPLACEMENT_CHARACTER_UTF8) - 1>> can be used to get its length in
|
|
bytes.
|
|
|
|
=for hackers
|
|
Found in file unicode_constants.h
|
|
|
|
=item sv_cat_decode
|
|
X<sv_cat_decode>
|
|
|
|
C<encoding> is assumed to be an C<Encode> object, the PV of C<ssv> is
|
|
assumed to be octets in that encoding and decoding the input starts
|
|
from the position which S<C<(PV + *offset)>> pointed to. C<dsv> will be
|
|
concatenated with the decoded UTF-8 string from C<ssv>. Decoding will terminate
|
|
when the string C<tstr> appears in decoding output or the input ends on
|
|
the PV of C<ssv>. The value which C<offset> points will be modified
|
|
to the last input position on C<ssv>.
|
|
|
|
Returns TRUE if the terminator was found, else returns FALSE.
|
|
|
|
bool sv_cat_decode(SV* dsv, SV *encoding, SV *ssv,
|
|
int *offset, char* tstr, int tlen)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_recode_to_utf8
|
|
X<sv_recode_to_utf8>
|
|
|
|
C<encoding> is assumed to be an C<Encode> object, on entry the PV
|
|
of C<sv> is assumed to be octets in that encoding, and C<sv>
|
|
will be converted into Unicode (and UTF-8).
|
|
|
|
If C<sv> already is UTF-8 (or if it is not C<POK>), or if C<encoding>
|
|
is not a reference, nothing is done to C<sv>. If C<encoding> is not
|
|
an C<Encode::XS> Encoding object, bad things will happen.
|
|
(See F<cpan/Encode/encoding.pm> and L<Encode>.)
|
|
|
|
The PV of C<sv> is returned.
|
|
|
|
char* sv_recode_to_utf8(SV* sv, SV *encoding)
|
|
|
|
=for hackers
|
|
Found in file sv.c
|
|
|
|
=item sv_uni_display
|
|
X<sv_uni_display>
|
|
|
|
Build to the scalar C<dsv> a displayable version of the scalar C<sv>,
|
|
the displayable version being at most C<pvlim> bytes long
|
|
(if longer, the rest is truncated and "..." will be appended).
|
|
|
|
The C<flags> argument is as in L</pv_uni_display>().
|
|
|
|
The pointer to the PV of the C<dsv> is returned.
|
|
|
|
char* sv_uni_display(SV *dsv, SV *ssv, STRLEN pvlim,
|
|
UV flags)
|
|
|
|
=for hackers
|
|
Found in file utf8.c
|
|
|
|
=item UNICODE_REPLACEMENT
|
|
X<UNICODE_REPLACEMENT>
|
|
|
|
Evaluates to 0xFFFD, the code point of the Unicode REPLACEMENT CHARACTER
|
|
|
|
=for hackers
|
|
Found in file utf8.h
|
|
|
|
=item UNI_TO_NATIVE
|
|
X<UNI_TO_NATIVE>
|
|
|
|
Returns the native equivalent of the input Unicode code point given by C<ch>.
|
|
Thus, C<UNI_TO_NATIVE(68)> on EBCDIC platforms returns 196. These each
|
|
represent the character C<"D"> on their respective platforms. On ASCII
|
|
platforms no conversion is needed, so this macro expands to just its input,
|
|
adding no time nor space requirements to the implementation.
|
|
|
|
UV UNI_TO_NATIVE(UV ch)
|
|
|
|
=for hackers
|
|
Found in file utf8.h
|
|
|
|
=item utf8n_to_uvchr
|
|
X<utf8n_to_uvchr>
|
|
|
|
THIS FUNCTION SHOULD BE USED IN ONLY VERY SPECIALIZED CIRCUMSTANCES.
|
|
Most code should use L</utf8_to_uvchr_buf>() rather than call this
|
|
directly.
|
|
|
|
Bottom level UTF-8 decode routine.
|
|
Returns the native code point value of the first character in the string C<s>,
|
|
which is assumed to be in UTF-8 (or UTF-EBCDIC) encoding, and no longer than
|
|
C<curlen> bytes; C<*retlen> (if C<retlen> isn't NULL) will be set to
|
|
the length, in bytes, of that character.
|
|
|
|
The value of C<flags> determines the behavior when C<s> does not point to a
|
|
well-formed UTF-8 character. If C<flags> is 0, encountering a malformation
|
|
causes zero to be returned and C<*retlen> is set so that (S<C<s> + C<*retlen>>)
|
|
is the next possible position in C<s> that could begin a non-malformed
|
|
character. Also, if UTF-8 warnings haven't been lexically disabled, a warning
|
|
is raised. Some UTF-8 input sequences may contain multiple malformations.
|
|
This function tries to find every possible one in each call, so multiple
|
|
warnings can be raised for the same sequence.
|
|
|
|
Various ALLOW flags can be set in C<flags> to allow (and not warn on)
|
|
individual types of malformations, such as the sequence being overlong (that
|
|
is, when there is a shorter sequence that can express the same code point;
|
|
overlong sequences are expressly forbidden in the UTF-8 standard due to
|
|
potential security issues). Another malformation example is the first byte of
|
|
a character not being a legal first byte. See F<utf8.h> for the list of such
|
|
flags. Even if allowed, this function generally returns the Unicode
|
|
REPLACEMENT CHARACTER when it encounters a malformation. There are flags in
|
|
F<utf8.h> to override this behavior for the overlong malformations, but don't
|
|
do that except for very specialized purposes.
|
|
|
|
The C<UTF8_CHECK_ONLY> flag overrides the behavior when a non-allowed (by other
|
|
flags) malformation is found. If this flag is set, the routine assumes that
|
|
the caller will raise a warning, and this function will silently just set
|
|
C<retlen> to C<-1> (cast to C<STRLEN>) and return zero.
|
|
|
|
Note that this API requires disambiguation between successful decoding a C<NUL>
|
|
character, and an error return (unless the C<UTF8_CHECK_ONLY> flag is set), as
|
|
in both cases, 0 is returned, and, depending on the malformation, C<retlen> may
|
|
be set to 1. To disambiguate, upon a zero return, see if the first byte of
|
|
C<s> is 0 as well. If so, the input was a C<NUL>; if not, the input had an
|
|
error. Or you can use C<L</utf8n_to_uvchr_error>>.
|
|
|
|
Certain code points are considered problematic. These are Unicode surrogates,
|
|
Unicode non-characters, and code points above the Unicode maximum of 0x10FFFF.
|
|
By default these are considered regular code points, but certain situations
|
|
warrant special handling for them, which can be specified using the C<flags>
|
|
parameter. If C<flags> contains C<UTF8_DISALLOW_ILLEGAL_INTERCHANGE>, all
|
|
three classes are treated as malformations and handled as such. The flags
|
|
C<UTF8_DISALLOW_SURROGATE>, C<UTF8_DISALLOW_NONCHAR>, and
|
|
C<UTF8_DISALLOW_SUPER> (meaning above the legal Unicode maximum) can be set to
|
|
disallow these categories individually. C<UTF8_DISALLOW_ILLEGAL_INTERCHANGE>
|
|
restricts the allowed inputs to the strict UTF-8 traditionally defined by
|
|
Unicode. Use C<UTF8_DISALLOW_ILLEGAL_C9_INTERCHANGE> to use the strictness
|
|
definition given by
|
|
L<Unicode Corrigendum #9|https://www.unicode.org/versions/corrigendum9.html>.
|
|
The difference between traditional strictness and C9 strictness is that the
|
|
latter does not forbid non-character code points. (They are still discouraged,
|
|
however.) For more discussion see L<perlunicode/Noncharacter code points>.
|
|
|
|
The flags C<UTF8_WARN_ILLEGAL_INTERCHANGE>,
|
|
C<UTF8_WARN_ILLEGAL_C9_INTERCHANGE>, C<UTF8_WARN_SURROGATE>,
|
|
C<UTF8_WARN_NONCHAR>, and C<UTF8_WARN_SUPER> will cause warning messages to be
|
|
raised for their respective categories, but otherwise the code points are
|
|
considered valid (not malformations). To get a category to both be treated as
|
|
a malformation and raise a warning, specify both the WARN and DISALLOW flags.
|
|
(But note that warnings are not raised if lexically disabled nor if
|
|
C<UTF8_CHECK_ONLY> is also specified.)
|
|
|
|
Extremely high code points were never specified in any standard, and require an
|
|
extension to UTF-8 to express, which Perl does. It is likely that programs
|
|
written in something other than Perl would not be able to read files that
|
|
contain these; nor would Perl understand files written by something that uses a
|
|
different extension. For these reasons, there is a separate set of flags that
|
|
can warn and/or disallow these extremely high code points, even if other
|
|
above-Unicode ones are accepted. They are the C<UTF8_WARN_PERL_EXTENDED> and
|
|
C<UTF8_DISALLOW_PERL_EXTENDED> flags. For more information see
|
|
L</C<UTF8_GOT_PERL_EXTENDED>>. Of course C<UTF8_DISALLOW_SUPER> will treat all
|
|
above-Unicode code points, including these, as malformations.
|
|
(Note that the Unicode standard considers anything above 0x10FFFF to be
|
|
illegal, but there are standards predating it that allow up to 0x7FFF_FFFF
|
|
(2**31 -1))
|
|
|
|
A somewhat misleadingly named synonym for C<UTF8_WARN_PERL_EXTENDED> is
|
|
retained for backward compatibility: C<UTF8_WARN_ABOVE_31_BIT>. Similarly,
|
|
C<UTF8_DISALLOW_ABOVE_31_BIT> is usable instead of the more accurately named
|
|
C<UTF8_DISALLOW_PERL_EXTENDED>. The names are misleading because these flags
|
|
can apply to code points that actually do fit in 31 bits. This happens on
|
|
EBCDIC platforms, and sometimes when the L<overlong
|
|
malformation|/C<UTF8_GOT_LONG>> is also present. The new names accurately
|
|
describe the situation in all cases.
|
|
|
|
|
|
All other code points corresponding to Unicode characters, including private
|
|
use and those yet to be assigned, are never considered malformed and never
|
|
warn.
|
|
|
|
UV utf8n_to_uvchr(const U8 *s, STRLEN curlen,
|
|
STRLEN *retlen, const U32 flags)
|
|
|
|
=for hackers
|
|
Found in file utf8.c
|
|
|
|
=item utf8n_to_uvchr_error
|
|
X<utf8n_to_uvchr_error>
|
|
|
|
THIS FUNCTION SHOULD BE USED IN ONLY VERY SPECIALIZED CIRCUMSTANCES.
|
|
Most code should use L</utf8_to_uvchr_buf>() rather than call this
|
|
directly.
|
|
|
|
This function is for code that needs to know what the precise malformation(s)
|
|
are when an error is found. If you also need to know the generated warning
|
|
messages, use L</utf8n_to_uvchr_msgs>() instead.
|
|
|
|
It is like C<L</utf8n_to_uvchr>> but it takes an extra parameter placed after
|
|
all the others, C<errors>. If this parameter is 0, this function behaves
|
|
identically to C<L</utf8n_to_uvchr>>. Otherwise, C<errors> should be a pointer
|
|
to a C<U32> variable, which this function sets to indicate any errors found.
|
|
Upon return, if C<*errors> is 0, there were no errors found. Otherwise,
|
|
C<*errors> is the bit-wise C<OR> of the bits described in the list below. Some
|
|
of these bits will be set if a malformation is found, even if the input
|
|
C<flags> parameter indicates that the given malformation is allowed; those
|
|
exceptions are noted:
|
|
|
|
=over 4
|
|
|
|
=item C<UTF8_GOT_PERL_EXTENDED>
|
|
|
|
The input sequence is not standard UTF-8, but a Perl extension. This bit is
|
|
set only if the input C<flags> parameter contains either the
|
|
C<UTF8_DISALLOW_PERL_EXTENDED> or the C<UTF8_WARN_PERL_EXTENDED> flags.
|
|
|
|
Code points above 0x7FFF_FFFF (2**31 - 1) were never specified in any standard,
|
|
and so some extension must be used to express them. Perl uses a natural
|
|
extension to UTF-8 to represent the ones up to 2**36-1, and invented a further
|
|
extension to represent even higher ones, so that any code point that fits in a
|
|
64-bit word can be represented. Text using these extensions is not likely to
|
|
be portable to non-Perl code. We lump both of these extensions together and
|
|
refer to them as Perl extended UTF-8. There exist other extensions that people
|
|
have invented, incompatible with Perl's.
|
|
|
|
On EBCDIC platforms starting in Perl v5.24, the Perl extension for representing
|
|
extremely high code points kicks in at 0x3FFF_FFFF (2**30 -1), which is lower
|
|
than on ASCII. Prior to that, code points 2**31 and higher were simply
|
|
unrepresentable, and a different, incompatible method was used to represent
|
|
code points between 2**30 and 2**31 - 1.
|
|
|
|
On both platforms, ASCII and EBCDIC, C<UTF8_GOT_PERL_EXTENDED> is set if
|
|
Perl extended UTF-8 is used.
|
|
|
|
In earlier Perls, this bit was named C<UTF8_GOT_ABOVE_31_BIT>, which you still
|
|
may use for backward compatibility. That name is misleading, as this flag may
|
|
be set when the code point actually does fit in 31 bits. This happens on
|
|
EBCDIC platforms, and sometimes when the L<overlong
|
|
malformation|/C<UTF8_GOT_LONG>> is also present. The new name accurately
|
|
describes the situation in all cases.
|
|
|
|
=item C<UTF8_GOT_CONTINUATION>
|
|
|
|
The input sequence was malformed in that the first byte was a UTF-8
|
|
continuation byte.
|
|
|
|
=item C<UTF8_GOT_EMPTY>
|
|
|
|
The input C<curlen> parameter was 0.
|
|
|
|
=item C<UTF8_GOT_LONG>
|
|
|
|
The input sequence was malformed in that there is some other sequence that
|
|
evaluates to the same code point, but that sequence is shorter than this one.
|
|
|
|
Until Unicode 3.1, it was legal for programs to accept this malformation, but
|
|
it was discovered that this created security issues.
|
|
|
|
=item C<UTF8_GOT_NONCHAR>
|
|
|
|
The code point represented by the input UTF-8 sequence is for a Unicode
|
|
non-character code point.
|
|
This bit is set only if the input C<flags> parameter contains either the
|
|
C<UTF8_DISALLOW_NONCHAR> or the C<UTF8_WARN_NONCHAR> flags.
|
|
|
|
=item C<UTF8_GOT_NON_CONTINUATION>
|
|
|
|
The input sequence was malformed in that a non-continuation type byte was found
|
|
in a position where only a continuation type one should be. See also
|
|
L</C<UTF8_GOT_SHORT>>.
|
|
|
|
=item C<UTF8_GOT_OVERFLOW>
|
|
|
|
The input sequence was malformed in that it is for a code point that is not
|
|
representable in the number of bits available in an IV on the current platform.
|
|
|
|
=item C<UTF8_GOT_SHORT>
|
|
|
|
The input sequence was malformed in that C<curlen> is smaller than required for
|
|
a complete sequence. In other words, the input is for a partial character
|
|
sequence.
|
|
|
|
|
|
C<UTF8_GOT_SHORT> and C<UTF8_GOT_NON_CONTINUATION> both indicate a too short
|
|
sequence. The difference is that C<UTF8_GOT_NON_CONTINUATION> indicates always
|
|
that there is an error, while C<UTF8_GOT_SHORT> means that an incomplete
|
|
sequence was looked at. If no other flags are present, it means that the
|
|
sequence was valid as far as it went. Depending on the application, this could
|
|
mean one of three things:
|
|
|
|
=over
|
|
|
|
=item *
|
|
|
|
The C<curlen> length parameter passed in was too small, and the function was
|
|
prevented from examining all the necessary bytes.
|
|
|
|
=item *
|
|
|
|
The buffer being looked at is based on reading data, and the data received so
|
|
far stopped in the middle of a character, so that the next read will
|
|
read the remainder of this character. (It is up to the caller to deal with the
|
|
split bytes somehow.)
|
|
|
|
=item *
|
|
|
|
This is a real error, and the partial sequence is all we're going to get.
|
|
|
|
=back
|
|
|
|
=item C<UTF8_GOT_SUPER>
|
|
|
|
The input sequence was malformed in that it is for a non-Unicode code point;
|
|
that is, one above the legal Unicode maximum.
|
|
This bit is set only if the input C<flags> parameter contains either the
|
|
C<UTF8_DISALLOW_SUPER> or the C<UTF8_WARN_SUPER> flags.
|
|
|
|
=item C<UTF8_GOT_SURROGATE>
|
|
|
|
The input sequence was malformed in that it is for a -Unicode UTF-16 surrogate
|
|
code point.
|
|
This bit is set only if the input C<flags> parameter contains either the
|
|
C<UTF8_DISALLOW_SURROGATE> or the C<UTF8_WARN_SURROGATE> flags.
|
|
|
|
=back
|
|
|
|
To do your own error handling, call this function with the C<UTF8_CHECK_ONLY>
|
|
flag to suppress any warnings, and then examine the C<*errors> return.
|
|
|
|
UV utf8n_to_uvchr_error(const U8 *s, STRLEN curlen,
|
|
STRLEN *retlen,
|
|
const U32 flags,
|
|
U32 * errors)
|
|
|
|
=for hackers
|
|
Found in file utf8.c
|
|
|
|
=item utf8n_to_uvchr_msgs
|
|
X<utf8n_to_uvchr_msgs>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
THIS FUNCTION SHOULD BE USED IN ONLY VERY SPECIALIZED CIRCUMSTANCES.
|
|
Most code should use L</utf8_to_uvchr_buf>() rather than call this
|
|
directly.
|
|
|
|
This function is for code that needs to know what the precise malformation(s)
|
|
are when an error is found, and wants the corresponding warning and/or error
|
|
messages to be returned to the caller rather than be displayed. All messages
|
|
that would have been displayed if all lexcial warnings are enabled will be
|
|
returned.
|
|
|
|
It is just like C<L</utf8n_to_uvchr_error>> but it takes an extra parameter
|
|
placed after all the others, C<msgs>. If this parameter is 0, this function
|
|
behaves identically to C<L</utf8n_to_uvchr_error>>. Otherwise, C<msgs> should
|
|
be a pointer to an C<AV *> variable, in which this function creates a new AV to
|
|
contain any appropriate messages. The elements of the array are ordered so
|
|
that the first message that would have been displayed is in the 0th element,
|
|
and so on. Each element is a hash with three key-value pairs, as follows:
|
|
|
|
=over 4
|
|
|
|
=item C<text>
|
|
|
|
The text of the message as a C<SVpv>.
|
|
|
|
=item C<warn_categories>
|
|
|
|
The warning category (or categories) packed into a C<SVuv>.
|
|
|
|
=item C<flag>
|
|
|
|
A single flag bit associated with this message, in a C<SVuv>.
|
|
The bit corresponds to some bit in the C<*errors> return value,
|
|
such as C<UTF8_GOT_LONG>.
|
|
|
|
=back
|
|
|
|
It's important to note that specifying this parameter as non-null will cause
|
|
any warnings this function would otherwise generate to be suppressed, and
|
|
instead be placed in C<*msgs>. The caller can check the lexical warnings state
|
|
(or not) when choosing what to do with the returned messages.
|
|
|
|
If the flag C<UTF8_CHECK_ONLY> is passed, no warnings are generated, and hence
|
|
no AV is created.
|
|
|
|
The caller, of course, is responsible for freeing any returned AV.
|
|
|
|
UV utf8n_to_uvchr_msgs(const U8 *s, STRLEN curlen,
|
|
STRLEN *retlen,
|
|
const U32 flags,
|
|
U32 * errors, AV ** msgs)
|
|
|
|
=for hackers
|
|
Found in file utf8.c
|
|
|
|
=item UTF8SKIP
|
|
X<UTF8SKIP>
|
|
|
|
returns the number of bytes a non-malformed UTF-8 encoded character whose first
|
|
(perhaps only) byte is pointed to by C<s>.
|
|
|
|
If there is a possibility of malformed input, use instead:
|
|
|
|
=over
|
|
|
|
=item L</C<UTF8_SAFE_SKIP>> if you know the maximum ending pointer in the
|
|
buffer pointed to by C<s>; or
|
|
|
|
=item L</C<UTF8_CHK_SKIP>> if you don't know it.
|
|
|
|
=back
|
|
|
|
It is better to restructure your code so the end pointer is passed down so that
|
|
you know what it actually is at the point of this call, but if that isn't
|
|
possible, L</C<UTF8_CHK_SKIP>> can minimize the chance of accessing beyond the end
|
|
of the input buffer.
|
|
|
|
STRLEN UTF8SKIP(char* s)
|
|
|
|
=for hackers
|
|
Found in file utf8.h
|
|
|
|
=item UTF8_CHK_SKIP
|
|
X<UTF8_CHK_SKIP>
|
|
|
|
This is a safer version of L</C<UTF8SKIP>>, but still not as safe as
|
|
L</C<UTF8_SAFE_SKIP>>. This version doesn't blindly assume that the input
|
|
string pointed to by C<s> is well-formed, but verifies that there isn't a NUL
|
|
terminating character before the expected end of the next character in C<s>.
|
|
The length C<UTF8_CHK_SKIP> returns stops just before any such NUL.
|
|
|
|
Perl tends to add NULs, as an insurance policy, after the end of strings in
|
|
SV's, so it is likely that using this macro will prevent inadvertent reading
|
|
beyond the end of the input buffer, even if it is malformed UTF-8.
|
|
|
|
This macro is intended to be used by XS modules where the inputs could be
|
|
malformed, and it isn't feasible to restructure to use the safer
|
|
L</C<UTF8_SAFE_SKIP>>, for example when interfacing with a C library.
|
|
|
|
STRLEN UTF8_CHK_SKIP(char* s)
|
|
|
|
=for hackers
|
|
Found in file utf8.h
|
|
|
|
=item utf8_distance
|
|
X<utf8_distance>
|
|
|
|
Returns the number of UTF-8 characters between the UTF-8 pointers C<a>
|
|
and C<b>.
|
|
|
|
WARNING: use only if you *know* that the pointers point inside the
|
|
same UTF-8 buffer.
|
|
|
|
IV utf8_distance(const U8 *a, const U8 *b)
|
|
|
|
=for hackers
|
|
Found in file inline.h
|
|
|
|
=item utf8_hop
|
|
X<utf8_hop>
|
|
|
|
Return the UTF-8 pointer C<s> displaced by C<off> characters, either
|
|
forward or backward.
|
|
|
|
WARNING: do not use the following unless you *know* C<off> is within
|
|
the UTF-8 data pointed to by C<s> *and* that on entry C<s> is aligned
|
|
on the first byte of character or just after the last byte of a character.
|
|
|
|
U8* utf8_hop(const U8 *s, SSize_t off)
|
|
|
|
=for hackers
|
|
Found in file inline.h
|
|
|
|
=item utf8_hop_back
|
|
X<utf8_hop_back>
|
|
|
|
Return the UTF-8 pointer C<s> displaced by up to C<off> characters,
|
|
backward.
|
|
|
|
C<off> must be non-positive.
|
|
|
|
C<s> must be after or equal to C<start>.
|
|
|
|
When moving backward it will not move before C<start>.
|
|
|
|
Will not exceed this limit even if the string is not valid "UTF-8".
|
|
|
|
U8* utf8_hop_back(const U8 *s, SSize_t off,
|
|
const U8 *start)
|
|
|
|
=for hackers
|
|
Found in file inline.h
|
|
|
|
=item utf8_hop_forward
|
|
X<utf8_hop_forward>
|
|
|
|
Return the UTF-8 pointer C<s> displaced by up to C<off> characters,
|
|
forward.
|
|
|
|
C<off> must be non-negative.
|
|
|
|
C<s> must be before or equal to C<end>.
|
|
|
|
When moving forward it will not move beyond C<end>.
|
|
|
|
Will not exceed this limit even if the string is not valid "UTF-8".
|
|
|
|
U8* utf8_hop_forward(const U8 *s, SSize_t off,
|
|
const U8 *end)
|
|
|
|
=for hackers
|
|
Found in file inline.h
|
|
|
|
=item utf8_hop_safe
|
|
X<utf8_hop_safe>
|
|
|
|
Return the UTF-8 pointer C<s> displaced by up to C<off> characters,
|
|
either forward or backward.
|
|
|
|
When moving backward it will not move before C<start>.
|
|
|
|
When moving forward it will not move beyond C<end>.
|
|
|
|
Will not exceed those limits even if the string is not valid "UTF-8".
|
|
|
|
U8* utf8_hop_safe(const U8 *s, SSize_t off,
|
|
const U8 *start, const U8 *end)
|
|
|
|
=for hackers
|
|
Found in file inline.h
|
|
|
|
=item UTF8_IS_INVARIANT
|
|
X<UTF8_IS_INVARIANT>
|
|
|
|
Evaluates to 1 if the byte C<c> represents the same character when encoded in
|
|
UTF-8 as when not; otherwise evaluates to 0. UTF-8 invariant characters can be
|
|
copied as-is when converting to/from UTF-8, saving time.
|
|
|
|
In spite of the name, this macro gives the correct result if the input string
|
|
from which C<c> comes is not encoded in UTF-8.
|
|
|
|
See C<L</UVCHR_IS_INVARIANT>> for checking if a UV is invariant.
|
|
|
|
bool UTF8_IS_INVARIANT(char c)
|
|
|
|
=for hackers
|
|
Found in file utf8.h
|
|
|
|
=item UTF8_IS_NONCHAR
|
|
X<UTF8_IS_NONCHAR>
|
|
|
|
Evaluates to non-zero if the first few bytes of the string starting at C<s> and
|
|
looking no further than S<C<e - 1>> are well-formed UTF-8 that represents one
|
|
of the Unicode non-character code points; otherwise it evaluates to 0. If
|
|
non-zero, the value gives how many bytes starting at C<s> comprise the code
|
|
point's representation.
|
|
|
|
bool UTF8_IS_NONCHAR(const U8 *s, const U8 *e)
|
|
|
|
=for hackers
|
|
Found in file utf8.h
|
|
|
|
=item UTF8_IS_SUPER
|
|
X<UTF8_IS_SUPER>
|
|
|
|
Recall that Perl recognizes an extension to UTF-8 that can encode code
|
|
points larger than the ones defined by Unicode, which are 0..0x10FFFF.
|
|
|
|
This macro evaluates to non-zero if the first few bytes of the string starting
|
|
at C<s> and looking no further than S<C<e - 1>> are from this UTF-8 extension;
|
|
otherwise it evaluates to 0. If non-zero, the value gives how many bytes
|
|
starting at C<s> comprise the code point's representation.
|
|
|
|
0 is returned if the bytes are not well-formed extended UTF-8, or if they
|
|
represent a code point that cannot fit in a UV on the current platform. Hence
|
|
this macro can give different results when run on a 64-bit word machine than on
|
|
one with a 32-bit word size.
|
|
|
|
Note that it is illegal to have code points that are larger than what can
|
|
fit in an IV on the current machine.
|
|
|
|
bool UTF8_IS_SUPER(const U8 *s, const U8 *e)
|
|
|
|
=for hackers
|
|
Found in file utf8.h
|
|
|
|
=item UTF8_IS_SURROGATE
|
|
X<UTF8_IS_SURROGATE>
|
|
|
|
Evaluates to non-zero if the first few bytes of the string starting at C<s> and
|
|
looking no further than S<C<e - 1>> are well-formed UTF-8 that represents one
|
|
of the Unicode surrogate code points; otherwise it evaluates to 0. If
|
|
non-zero, the value gives how many bytes starting at C<s> comprise the code
|
|
point's representation.
|
|
|
|
bool UTF8_IS_SURROGATE(const U8 *s, const U8 *e)
|
|
|
|
=for hackers
|
|
Found in file utf8.h
|
|
|
|
=item utf8_length
|
|
X<utf8_length>
|
|
|
|
Returns the number of characters in the sequence of UTF-8-encoded bytes starting
|
|
at C<s> and ending at the byte just before C<e>. If <s> and <e> point to the
|
|
same place, it returns 0 with no warning raised.
|
|
|
|
If C<e E<lt> s> or if the scan would end up past C<e>, it raises a UTF8 warning
|
|
and returns the number of valid characters.
|
|
|
|
STRLEN utf8_length(const U8* s, const U8 *e)
|
|
|
|
=for hackers
|
|
Found in file utf8.c
|
|
|
|
=item UTF8_MAXBYTES
|
|
X<UTF8_MAXBYTES>
|
|
|
|
The maximum width of a single UTF-8 encoded character, in bytes.
|
|
|
|
NOTE: Strictly speaking Perl's UTF-8 should not be called UTF-8 since UTF-8
|
|
is an encoding of Unicode, and Unicode's upper limit, 0x10FFFF, can be
|
|
expressed with 4 bytes. However, Perl thinks of UTF-8 as a way to encode
|
|
non-negative integers in a binary format, even those above Unicode.
|
|
|
|
=for hackers
|
|
Found in file utf8.h
|
|
|
|
=item UTF8_MAXBYTES_CASE
|
|
X<UTF8_MAXBYTES_CASE>
|
|
|
|
The maximum number of UTF-8 bytes a single Unicode character can
|
|
uppercase/lowercase/titlecase/fold into.
|
|
|
|
=for hackers
|
|
Found in file utf8.h
|
|
|
|
=item UTF8_SAFE_SKIP
|
|
X<UTF8_SAFE_SKIP>
|
|
|
|
returns 0 if S<C<s E<gt>= e>>; otherwise returns the number of bytes in the
|
|
UTF-8 encoded character whose first byte is pointed to by C<s>. But it never
|
|
returns beyond C<e>. On DEBUGGING builds, it asserts that S<C<s E<lt>= e>>.
|
|
|
|
STRLEN UTF8_SAFE_SKIP(char* s, char* e)
|
|
|
|
=for hackers
|
|
Found in file utf8.h
|
|
|
|
=item UTF8_SKIP
|
|
X<UTF8_SKIP>
|
|
|
|
This is a synonym for L</C<UTF8SKIP>>
|
|
|
|
STRLEN UTF8_SKIP(char* s)
|
|
|
|
=for hackers
|
|
Found in file utf8.h
|
|
|
|
=item utf8_to_bytes
|
|
X<utf8_to_bytes>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
Converts a string C<"s"> of length C<*lenp> from UTF-8 into native byte encoding.
|
|
Unlike L</bytes_to_utf8>, this over-writes the original string, and
|
|
updates C<*lenp> to contain the new length.
|
|
Returns zero on failure (leaving C<"s"> unchanged) setting C<*lenp> to -1.
|
|
|
|
Upon successful return, the number of variants in the string can be computed by
|
|
having saved the value of C<*lenp> before the call, and subtracting the
|
|
after-call value of C<*lenp> from it.
|
|
|
|
If you need a copy of the string, see L</bytes_from_utf8>.
|
|
|
|
U8* utf8_to_bytes(U8 *s, STRLEN *lenp)
|
|
|
|
=for hackers
|
|
Found in file utf8.c
|
|
|
|
=item utf8_to_uvchr_buf
|
|
X<utf8_to_uvchr_buf>
|
|
|
|
Returns the native code point of the first character in the string C<s> which
|
|
is assumed to be in UTF-8 encoding; C<send> points to 1 beyond the end of C<s>.
|
|
C<*retlen> will be set to the length, in bytes, of that character.
|
|
|
|
If C<s> does not point to a well-formed UTF-8 character and UTF8 warnings are
|
|
enabled, zero is returned and C<*retlen> is set (if C<retlen> isn't
|
|
C<NULL>) to -1. If those warnings are off, the computed value, if well-defined
|
|
(or the Unicode REPLACEMENT CHARACTER if not), is silently returned, and
|
|
C<*retlen> is set (if C<retlen> isn't C<NULL>) so that (S<C<s> + C<*retlen>>) is
|
|
the next possible position in C<s> that could begin a non-malformed character.
|
|
See L</utf8n_to_uvchr> for details on when the REPLACEMENT CHARACTER is
|
|
returned.
|
|
|
|
UV utf8_to_uvchr_buf(const U8 *s, const U8 *send,
|
|
STRLEN *retlen)
|
|
|
|
=for hackers
|
|
Found in file utf8.c
|
|
|
|
=item UVCHR_IS_INVARIANT
|
|
X<UVCHR_IS_INVARIANT>
|
|
|
|
Evaluates to 1 if the representation of code point C<cp> is the same whether or
|
|
not it is encoded in UTF-8; otherwise evaluates to 0. UTF-8 invariant
|
|
characters can be copied as-is when converting to/from UTF-8, saving time.
|
|
C<cp> is Unicode if above 255; otherwise is platform-native.
|
|
|
|
bool UVCHR_IS_INVARIANT(UV cp)
|
|
|
|
=for hackers
|
|
Found in file utf8.h
|
|
|
|
=item UVCHR_SKIP
|
|
X<UVCHR_SKIP>
|
|
|
|
returns the number of bytes required to represent the code point C<cp> when
|
|
encoded as UTF-8. C<cp> is a native (ASCII or EBCDIC) code point if less than
|
|
255; a Unicode code point otherwise.
|
|
|
|
STRLEN UVCHR_SKIP(UV cp)
|
|
|
|
=for hackers
|
|
Found in file utf8.h
|
|
|
|
=item uvchr_to_utf8
|
|
X<uvchr_to_utf8>
|
|
|
|
Adds the UTF-8 representation of the native code point C<uv> to the end
|
|
of the string C<d>; C<d> should have at least C<UVCHR_SKIP(uv)+1> (up to
|
|
C<UTF8_MAXBYTES+1>) free bytes available. The return value is the pointer to
|
|
the byte after the end of the new character. In other words,
|
|
|
|
d = uvchr_to_utf8(d, uv);
|
|
|
|
is the recommended wide native character-aware way of saying
|
|
|
|
*(d++) = uv;
|
|
|
|
This function accepts any code point from 0..C<IV_MAX> as input.
|
|
C<IV_MAX> is typically 0x7FFF_FFFF in a 32-bit word.
|
|
|
|
It is possible to forbid or warn on non-Unicode code points, or those that may
|
|
be problematic by using L</uvchr_to_utf8_flags>.
|
|
|
|
U8* uvchr_to_utf8(U8 *d, UV uv)
|
|
|
|
=for hackers
|
|
Found in file utf8.c
|
|
|
|
=item uvchr_to_utf8_flags
|
|
X<uvchr_to_utf8_flags>
|
|
|
|
Adds the UTF-8 representation of the native code point C<uv> to the end
|
|
of the string C<d>; C<d> should have at least C<UVCHR_SKIP(uv)+1> (up to
|
|
C<UTF8_MAXBYTES+1>) free bytes available. The return value is the pointer to
|
|
the byte after the end of the new character. In other words,
|
|
|
|
d = uvchr_to_utf8_flags(d, uv, flags);
|
|
|
|
or, in most cases,
|
|
|
|
d = uvchr_to_utf8_flags(d, uv, 0);
|
|
|
|
This is the Unicode-aware way of saying
|
|
|
|
*(d++) = uv;
|
|
|
|
If C<flags> is 0, this function accepts any code point from 0..C<IV_MAX> as
|
|
input. C<IV_MAX> is typically 0x7FFF_FFFF in a 32-bit word.
|
|
|
|
Specifying C<flags> can further restrict what is allowed and not warned on, as
|
|
follows:
|
|
|
|
If C<uv> is a Unicode surrogate code point and C<UNICODE_WARN_SURROGATE> is set,
|
|
the function will raise a warning, provided UTF8 warnings are enabled. If
|
|
instead C<UNICODE_DISALLOW_SURROGATE> is set, the function will fail and return
|
|
NULL. If both flags are set, the function will both warn and return NULL.
|
|
|
|
Similarly, the C<UNICODE_WARN_NONCHAR> and C<UNICODE_DISALLOW_NONCHAR> flags
|
|
affect how the function handles a Unicode non-character.
|
|
|
|
And likewise, the C<UNICODE_WARN_SUPER> and C<UNICODE_DISALLOW_SUPER> flags
|
|
affect the handling of code points that are above the Unicode maximum of
|
|
0x10FFFF. Languages other than Perl may not be able to accept files that
|
|
contain these.
|
|
|
|
The flag C<UNICODE_WARN_ILLEGAL_INTERCHANGE> selects all three of
|
|
the above WARN flags; and C<UNICODE_DISALLOW_ILLEGAL_INTERCHANGE> selects all
|
|
three DISALLOW flags. C<UNICODE_DISALLOW_ILLEGAL_INTERCHANGE> restricts the
|
|
allowed inputs to the strict UTF-8 traditionally defined by Unicode.
|
|
Similarly, C<UNICODE_WARN_ILLEGAL_C9_INTERCHANGE> and
|
|
C<UNICODE_DISALLOW_ILLEGAL_C9_INTERCHANGE> are shortcuts to select the
|
|
above-Unicode and surrogate flags, but not the non-character ones, as
|
|
defined in
|
|
L<Unicode Corrigendum #9|https://www.unicode.org/versions/corrigendum9.html>.
|
|
See L<perlunicode/Noncharacter code points>.
|
|
|
|
Extremely high code points were never specified in any standard, and require an
|
|
extension to UTF-8 to express, which Perl does. It is likely that programs
|
|
written in something other than Perl would not be able to read files that
|
|
contain these; nor would Perl understand files written by something that uses a
|
|
different extension. For these reasons, there is a separate set of flags that
|
|
can warn and/or disallow these extremely high code points, even if other
|
|
above-Unicode ones are accepted. They are the C<UNICODE_WARN_PERL_EXTENDED>
|
|
and C<UNICODE_DISALLOW_PERL_EXTENDED> flags. For more information see
|
|
L</C<UTF8_GOT_PERL_EXTENDED>>. Of course C<UNICODE_DISALLOW_SUPER> will
|
|
treat all above-Unicode code points, including these, as malformations. (Note
|
|
that the Unicode standard considers anything above 0x10FFFF to be illegal, but
|
|
there are standards predating it that allow up to 0x7FFF_FFFF (2**31 -1))
|
|
|
|
A somewhat misleadingly named synonym for C<UNICODE_WARN_PERL_EXTENDED> is
|
|
retained for backward compatibility: C<UNICODE_WARN_ABOVE_31_BIT>. Similarly,
|
|
C<UNICODE_DISALLOW_ABOVE_31_BIT> is usable instead of the more accurately named
|
|
C<UNICODE_DISALLOW_PERL_EXTENDED>. The names are misleading because on EBCDIC
|
|
platforms,these flags can apply to code points that actually do fit in 31 bits.
|
|
The new names accurately describe the situation in all cases.
|
|
|
|
U8* uvchr_to_utf8_flags(U8 *d, UV uv, UV flags)
|
|
|
|
=for hackers
|
|
Found in file utf8.c
|
|
|
|
=item uvchr_to_utf8_flags_msgs
|
|
X<uvchr_to_utf8_flags_msgs>
|
|
|
|
|
|
NOTE: this function is experimental and may change or be
|
|
removed without notice.
|
|
|
|
|
|
THIS FUNCTION SHOULD BE USED IN ONLY VERY SPECIALIZED CIRCUMSTANCES.
|
|
|
|
Most code should use C<L</uvchr_to_utf8_flags>()> rather than call this directly.
|
|
|
|
This function is for code that wants any warning and/or error messages to be
|
|
returned to the caller rather than be displayed. All messages that would have
|
|
been displayed if all lexical warnings are enabled will be returned.
|
|
|
|
It is just like C<L</uvchr_to_utf8_flags>> but it takes an extra parameter
|
|
placed after all the others, C<msgs>. If this parameter is 0, this function
|
|
behaves identically to C<L</uvchr_to_utf8_flags>>. Otherwise, C<msgs> should
|
|
be a pointer to an C<HV *> variable, in which this function creates a new HV to
|
|
contain any appropriate messages. The hash has three key-value pairs, as
|
|
follows:
|
|
|
|
=over 4
|
|
|
|
=item C<text>
|
|
|
|
The text of the message as a C<SVpv>.
|
|
|
|
=item C<warn_categories>
|
|
|
|
The warning category (or categories) packed into a C<SVuv>.
|
|
|
|
=item C<flag>
|
|
|
|
A single flag bit associated with this message, in a C<SVuv>.
|
|
The bit corresponds to some bit in the C<*errors> return value,
|
|
such as C<UNICODE_GOT_SURROGATE>.
|
|
|
|
=back
|
|
|
|
It's important to note that specifying this parameter as non-null will cause
|
|
any warnings this function would otherwise generate to be suppressed, and
|
|
instead be placed in C<*msgs>. The caller can check the lexical warnings state
|
|
(or not) when choosing what to do with the returned messages.
|
|
|
|
The caller, of course, is responsible for freeing any returned HV.
|
|
|
|
U8* uvchr_to_utf8_flags_msgs(U8 *d, UV uv, UV flags,
|
|
HV ** msgs)
|
|
|
|
=for hackers
|
|
Found in file utf8.c
|
|
|
|
|
|
=back
|
|
|
|
=head1 Variables created by C<xsubpp> and C<xsubpp> internal functions
|
|
|
|
=over 8
|
|
|
|
=item newXSproto
|
|
X<newXSproto>
|
|
|
|
Used by C<xsubpp> to hook up XSUBs as Perl subs. Adds Perl prototypes to
|
|
the subs.
|
|
|
|
=for hackers
|
|
Found in file XSUB.h
|
|
|
|
=item XS_APIVERSION_BOOTCHECK
|
|
X<XS_APIVERSION_BOOTCHECK>
|
|
|
|
Macro to verify that the perl api version an XS module has been compiled against
|
|
matches the api version of the perl interpreter it's being loaded into.
|
|
|
|
XS_APIVERSION_BOOTCHECK;
|
|
|
|
=for hackers
|
|
Found in file XSUB.h
|
|
|
|
=item XS_VERSION
|
|
X<XS_VERSION>
|
|
|
|
The version identifier for an XS module. This is usually
|
|
handled automatically by C<ExtUtils::MakeMaker>. See
|
|
C<L</XS_VERSION_BOOTCHECK>>.
|
|
|
|
=for hackers
|
|
Found in file XSUB.h
|
|
|
|
=item XS_VERSION_BOOTCHECK
|
|
X<XS_VERSION_BOOTCHECK>
|
|
|
|
Macro to verify that a PM module's C<$VERSION> variable matches the XS
|
|
module's C<XS_VERSION> variable. This is usually handled automatically by
|
|
C<xsubpp>. See L<perlxs/"The VERSIONCHECK: Keyword">.
|
|
|
|
XS_VERSION_BOOTCHECK;
|
|
|
|
=for hackers
|
|
Found in file XSUB.h
|
|
|
|
|
|
=back
|
|
|
|
=head1 Warning and Dieing
|
|
|
|
In all these calls, the C<U32 wI<n>> parameters are warning category
|
|
constants. You can see the ones currently available in
|
|
L<warnings/Category Hierarchy>, just capitalize all letters in the names
|
|
and prefix them by C<WARN_>. So, for example, the category C<void> used in a
|
|
perl program becomes C<WARN_VOID> when used in XS code and passed to one of
|
|
the calls below.
|
|
|
|
|
|
=over 8
|
|
|
|
=item ckWARN
|
|
X<ckWARN>
|
|
|
|
Returns a boolean as to whether or not warnings are enabled for the warning
|
|
category C<w>. If the category is by default enabled even if not within the
|
|
scope of S<C<use warnings>>, instead use the L</ckWARN_d> macro.
|
|
|
|
bool ckWARN(U32 w)
|
|
|
|
=for hackers
|
|
Found in file warnings.h
|
|
|
|
=item ckWARN2
|
|
X<ckWARN2>
|
|
|
|
Like C<L</ckWARN>>, but takes two warnings categories as input, and returns
|
|
TRUE if either is enabled. If either category is by default enabled even if
|
|
not within the scope of S<C<use warnings>>, instead use the L</ckWARN2_d>
|
|
macro. The categories must be completely independent, one may not be
|
|
subclassed from the other.
|
|
|
|
bool ckWARN2(U32 w1, U32 w2)
|
|
|
|
=for hackers
|
|
Found in file warnings.h
|
|
|
|
=item ckWARN3
|
|
X<ckWARN3>
|
|
|
|
Like C<L</ckWARN2>>, but takes three warnings categories as input, and returns
|
|
TRUE if any is enabled. If any of the categories is by default enabled even
|
|
if not within the scope of S<C<use warnings>>, instead use the L</ckWARN3_d>
|
|
macro. The categories must be completely independent, one may not be
|
|
subclassed from any other.
|
|
|
|
bool ckWARN3(U32 w1, U32 w2, U32 w3)
|
|
|
|
=for hackers
|
|
Found in file warnings.h
|
|
|
|
=item ckWARN4
|
|
X<ckWARN4>
|
|
|
|
Like C<L</ckWARN3>>, but takes four warnings categories as input, and returns
|
|
TRUE if any is enabled. If any of the categories is by default enabled even
|
|
if not within the scope of S<C<use warnings>>, instead use the L</ckWARN4_d>
|
|
macro. The categories must be completely independent, one may not be
|
|
subclassed from any other.
|
|
|
|
bool ckWARN4(U32 w1, U32 w2, U32 w3, U32 w4)
|
|
|
|
=for hackers
|
|
Found in file warnings.h
|
|
|
|
=item ckWARN_d
|
|
X<ckWARN_d>
|
|
|
|
Like C<L</ckWARN>>, but for use if and only if the warning category is by
|
|
default enabled even if not within the scope of S<C<use warnings>>.
|
|
|
|
bool ckWARN_d(U32 w)
|
|
|
|
=for hackers
|
|
Found in file warnings.h
|
|
|
|
=item ckWARN2_d
|
|
X<ckWARN2_d>
|
|
|
|
Like C<L</ckWARN2>>, but for use if and only if either warning category is by
|
|
default enabled even if not within the scope of S<C<use warnings>>.
|
|
|
|
bool ckWARN2_d(U32 w1, U32 w2)
|
|
|
|
=for hackers
|
|
Found in file warnings.h
|
|
|
|
=item ckWARN3_d
|
|
X<ckWARN3_d>
|
|
|
|
Like C<L</ckWARN3>>, but for use if and only if any of the warning categories
|
|
is by default enabled even if not within the scope of S<C<use warnings>>.
|
|
|
|
bool ckWARN3_d(U32 w1, U32 w2, U32 w3)
|
|
|
|
=for hackers
|
|
Found in file warnings.h
|
|
|
|
=item ckWARN4_d
|
|
X<ckWARN4_d>
|
|
|
|
Like C<L</ckWARN4>>, but for use if and only if any of the warning categories
|
|
is by default enabled even if not within the scope of S<C<use warnings>>.
|
|
|
|
bool ckWARN4_d(U32 w1, U32 w2, U32 w3, U32 w4)
|
|
|
|
=for hackers
|
|
Found in file warnings.h
|
|
|
|
=item CLEAR_ERRSV
|
|
X<CLEAR_ERRSV>
|
|
|
|
Clear the contents of C<$@>, setting it to the empty string.
|
|
|
|
This replaces any read-only SV with a fresh SV and removes any magic.
|
|
|
|
void CLEAR_ERRSV()
|
|
|
|
=for hackers
|
|
Found in file perl.h
|
|
|
|
=item croak
|
|
X<croak>
|
|
|
|
This is an XS interface to Perl's C<die> function.
|
|
|
|
Take a sprintf-style format pattern and argument list. These are used to
|
|
generate a string message. If the message does not end with a newline,
|
|
then it will be extended with some indication of the current location
|
|
in the code, as described for L</mess_sv>.
|
|
|
|
The error message will be used as an exception, by default
|
|
returning control to the nearest enclosing C<eval>, but subject to
|
|
modification by a C<$SIG{__DIE__}> handler. In any case, the C<croak>
|
|
function never returns normally.
|
|
|
|
For historical reasons, if C<pat> is null then the contents of C<ERRSV>
|
|
(C<$@>) will be used as an error message or object instead of building an
|
|
error message from arguments. If you want to throw a non-string object,
|
|
or build an error message in an SV yourself, it is preferable to use
|
|
the L</croak_sv> function, which does not involve clobbering C<ERRSV>.
|
|
|
|
void croak(const char* pat, ...)
|
|
|
|
=for hackers
|
|
Found in file util.c
|
|
|
|
=item croak_no_modify
|
|
X<croak_no_modify>
|
|
|
|
Exactly equivalent to C<Perl_croak(aTHX_ "%s", PL_no_modify)>, but generates
|
|
terser object code than using C<Perl_croak>. Less code used on exception code
|
|
paths reduces CPU cache pressure.
|
|
|
|
void croak_no_modify()
|
|
|
|
=for hackers
|
|
Found in file util.c
|
|
|
|
=item croak_sv
|
|
X<croak_sv>
|
|
|
|
This is an XS interface to Perl's C<die> function.
|
|
|
|
C<baseex> is the error message or object. If it is a reference, it
|
|
will be used as-is. Otherwise it is used as a string, and if it does
|
|
not end with a newline then it will be extended with some indication of
|
|
the current location in the code, as described for L</mess_sv>.
|
|
|
|
The error message or object will be used as an exception, by default
|
|
returning control to the nearest enclosing C<eval>, but subject to
|
|
modification by a C<$SIG{__DIE__}> handler. In any case, the C<croak_sv>
|
|
function never returns normally.
|
|
|
|
To die with a simple string message, the L</croak> function may be
|
|
more convenient.
|
|
|
|
void croak_sv(SV *baseex)
|
|
|
|
=for hackers
|
|
Found in file util.c
|
|
|
|
=item die
|
|
X<die>
|
|
|
|
Behaves the same as L</croak>, except for the return type.
|
|
It should be used only where the C<OP *> return type is required.
|
|
The function never actually returns.
|
|
|
|
OP* die(const char* pat, ...)
|
|
|
|
=for hackers
|
|
Found in file util.c
|
|
|
|
=item die_sv
|
|
X<die_sv>
|
|
|
|
Behaves the same as L</croak_sv>, except for the return type.
|
|
It should be used only where the C<OP *> return type is required.
|
|
The function never actually returns.
|
|
|
|
OP* die_sv(SV *baseex)
|
|
|
|
=for hackers
|
|
Found in file util.c
|
|
|
|
=item ERRSV
|
|
X<ERRSV>
|
|
|
|
Returns the SV for C<$@>, creating it if needed.
|
|
|
|
SV * ERRSV
|
|
|
|
=for hackers
|
|
Found in file perl.h
|
|
|
|
=item my_setenv
|
|
X<my_setenv>
|
|
|
|
A wrapper for the C library L<setenv(3)>. Don't use the latter, as the perl
|
|
version has desirable safeguards
|
|
|
|
void my_setenv(const char* nam, const char* val)
|
|
|
|
=for hackers
|
|
Found in file util.c
|
|
|
|
=item rsignal
|
|
X<rsignal>
|
|
|
|
A wrapper for the C library L<signal(2)>. Don't use the latter, as the Perl
|
|
version knows things that interact with the rest of the perl interpreter.
|
|
|
|
Sighandler_t rsignal(int i, Sighandler_t t)
|
|
|
|
=for hackers
|
|
Found in file util.c
|
|
|
|
=item SANE_ERRSV
|
|
X<SANE_ERRSV>
|
|
|
|
Clean up ERRSV so we can safely set it.
|
|
|
|
This replaces any read-only SV with a fresh writable copy and removes
|
|
any magic.
|
|
|
|
void SANE_ERRSV()
|
|
|
|
=for hackers
|
|
Found in file perl.h
|
|
|
|
=item vcroak
|
|
X<vcroak>
|
|
|
|
This is an XS interface to Perl's C<die> function.
|
|
|
|
C<pat> and C<args> are a sprintf-style format pattern and encapsulated
|
|
argument list. These are used to generate a string message. If the
|
|
message does not end with a newline, then it will be extended with
|
|
some indication of the current location in the code, as described for
|
|
L</mess_sv>.
|
|
|
|
The error message will be used as an exception, by default
|
|
returning control to the nearest enclosing C<eval>, but subject to
|
|
modification by a C<$SIG{__DIE__}> handler. In any case, the C<croak>
|
|
function never returns normally.
|
|
|
|
For historical reasons, if C<pat> is null then the contents of C<ERRSV>
|
|
(C<$@>) will be used as an error message or object instead of building an
|
|
error message from arguments. If you want to throw a non-string object,
|
|
or build an error message in an SV yourself, it is preferable to use
|
|
the L</croak_sv> function, which does not involve clobbering C<ERRSV>.
|
|
|
|
void vcroak(const char* pat, va_list* args)
|
|
|
|
=for hackers
|
|
Found in file util.c
|
|
|
|
=item vwarn
|
|
X<vwarn>
|
|
|
|
This is an XS interface to Perl's C<warn> function.
|
|
|
|
C<pat> and C<args> are a sprintf-style format pattern and encapsulated
|
|
argument list. These are used to generate a string message. If the
|
|
message does not end with a newline, then it will be extended with
|
|
some indication of the current location in the code, as described for
|
|
L</mess_sv>.
|
|
|
|
The error message or object will by default be written to standard error,
|
|
but this is subject to modification by a C<$SIG{__WARN__}> handler.
|
|
|
|
Unlike with L</vcroak>, C<pat> is not permitted to be null.
|
|
|
|
void vwarn(const char* pat, va_list* args)
|
|
|
|
=for hackers
|
|
Found in file util.c
|
|
|
|
=item warn
|
|
X<warn>
|
|
|
|
This is an XS interface to Perl's C<warn> function.
|
|
|
|
Take a sprintf-style format pattern and argument list. These are used to
|
|
generate a string message. If the message does not end with a newline,
|
|
then it will be extended with some indication of the current location
|
|
in the code, as described for L</mess_sv>.
|
|
|
|
The error message or object will by default be written to standard error,
|
|
but this is subject to modification by a C<$SIG{__WARN__}> handler.
|
|
|
|
Unlike with L</croak>, C<pat> is not permitted to be null.
|
|
|
|
void warn(const char* pat, ...)
|
|
|
|
=for hackers
|
|
Found in file util.c
|
|
|
|
=item warn_sv
|
|
X<warn_sv>
|
|
|
|
This is an XS interface to Perl's C<warn> function.
|
|
|
|
C<baseex> is the error message or object. If it is a reference, it
|
|
will be used as-is. Otherwise it is used as a string, and if it does
|
|
not end with a newline then it will be extended with some indication of
|
|
the current location in the code, as described for L</mess_sv>.
|
|
|
|
The error message or object will by default be written to standard error,
|
|
but this is subject to modification by a C<$SIG{__WARN__}> handler.
|
|
|
|
To warn with a simple string message, the L</warn> function may be
|
|
more convenient.
|
|
|
|
void warn_sv(SV *baseex)
|
|
|
|
=for hackers
|
|
Found in file util.c
|
|
|
|
|
|
=back
|
|
|
|
=head1 Undocumented functions
|
|
|
|
The following functions have been flagged as part of the public API,
|
|
but are currently undocumented. Use them at your own risk, as the
|
|
interfaces are subject to change. Functions that are not listed in this
|
|
document are not intended for public use, and should NOT be used under any
|
|
circumstances.
|
|
|
|
If you feel you need to use one of these functions, first send email to
|
|
L<perl5-porters@perl.org|mailto:perl5-porters@perl.org>. It may be
|
|
that there is a good reason for the function not being documented, and it
|
|
should be removed from this list; or it may just be that no one has gotten
|
|
around to documenting it. In the latter case, you will be asked to submit a
|
|
patch to document the function. Once your patch is accepted, it will indicate
|
|
that the interface is stable (unless it is explicitly marked otherwise) and
|
|
usable by you.
|
|
|
|
=over
|
|
|
|
=item CvDEPTH
|
|
X<CvDEPTH>
|
|
|
|
=item CvGV
|
|
X<CvGV>
|
|
|
|
=item GetVars
|
|
X<GetVars>
|
|
|
|
=item Gv_AMupdate
|
|
X<Gv_AMupdate>
|
|
|
|
=item PerlIO_close
|
|
X<PerlIO_close>
|
|
|
|
=item PerlIO_context_layers
|
|
X<PerlIO_context_layers>
|
|
|
|
=item PerlIO_error
|
|
X<PerlIO_error>
|
|
|
|
=item PerlIO_fill
|
|
X<PerlIO_fill>
|
|
|
|
=item PerlIO_flush
|
|
X<PerlIO_flush>
|
|
|
|
=item PerlIO_get_bufsiz
|
|
X<PerlIO_get_bufsiz>
|
|
|
|
=item PerlIO_get_ptr
|
|
X<PerlIO_get_ptr>
|
|
|
|
=item PerlIO_read
|
|
X<PerlIO_read>
|
|
|
|
=item PerlIO_seek
|
|
X<PerlIO_seek>
|
|
|
|
=item PerlIO_set_cnt
|
|
X<PerlIO_set_cnt>
|
|
|
|
=item PerlIO_setlinebuf
|
|
X<PerlIO_setlinebuf>
|
|
|
|
=item PerlIO_stdout
|
|
X<PerlIO_stdout>
|
|
|
|
=item PerlIO_unread
|
|
X<PerlIO_unread>
|
|
|
|
=item SvAMAGIC_off
|
|
X<SvAMAGIC_off>
|
|
|
|
=item SvAMAGIC_on
|
|
X<SvAMAGIC_on>
|
|
|
|
=item amagic_call
|
|
X<amagic_call>
|
|
|
|
=item amagic_deref_call
|
|
X<amagic_deref_call>
|
|
|
|
=item any_dup
|
|
X<any_dup>
|
|
|
|
=item atfork_lock
|
|
X<atfork_lock>
|
|
|
|
=item atfork_unlock
|
|
X<atfork_unlock>
|
|
|
|
=item av_arylen_p
|
|
X<av_arylen_p>
|
|
|
|
=item av_iter_p
|
|
X<av_iter_p>
|
|
|
|
=item block_gimme
|
|
X<block_gimme>
|
|
|
|
=item call_atexit
|
|
X<call_atexit>
|
|
|
|
=item call_list
|
|
X<call_list>
|
|
|
|
=item calloc
|
|
X<calloc>
|
|
|
|
=item cast_i32
|
|
X<cast_i32>
|
|
|
|
=item cast_iv
|
|
X<cast_iv>
|
|
|
|
=item cast_ulong
|
|
X<cast_ulong>
|
|
|
|
=item cast_uv
|
|
X<cast_uv>
|
|
|
|
=item ck_warner
|
|
X<ck_warner>
|
|
|
|
=item ck_warner_d
|
|
X<ck_warner_d>
|
|
|
|
=item ckwarn
|
|
X<ckwarn>
|
|
|
|
=item ckwarn_d
|
|
X<ckwarn_d>
|
|
|
|
=item clear_defarray
|
|
X<clear_defarray>
|
|
|
|
=item clone_params_del
|
|
X<clone_params_del>
|
|
|
|
=item clone_params_new
|
|
X<clone_params_new>
|
|
|
|
=item croak_nocontext
|
|
X<croak_nocontext>
|
|
|
|
=item csighandler
|
|
X<csighandler>
|
|
|
|
=item csighandler1
|
|
X<csighandler1>
|
|
|
|
=item csighandler3
|
|
X<csighandler3>
|
|
|
|
=item cx_dump
|
|
X<cx_dump>
|
|
|
|
=item cx_dup
|
|
X<cx_dup>
|
|
|
|
=item cxinc
|
|
X<cxinc>
|
|
|
|
=item deb
|
|
X<deb>
|
|
|
|
=item deb_nocontext
|
|
X<deb_nocontext>
|
|
|
|
=item debop
|
|
X<debop>
|
|
|
|
=item debprofdump
|
|
X<debprofdump>
|
|
|
|
=item debstack
|
|
X<debstack>
|
|
|
|
=item debstackptrs
|
|
X<debstackptrs>
|
|
|
|
=item delimcpy
|
|
X<delimcpy>
|
|
|
|
=item despatch_signals
|
|
X<despatch_signals>
|
|
|
|
=item die_nocontext
|
|
X<die_nocontext>
|
|
|
|
=item dirp_dup
|
|
X<dirp_dup>
|
|
|
|
=item do_aspawn
|
|
X<do_aspawn>
|
|
|
|
=item do_close
|
|
X<do_close>
|
|
|
|
=item do_gv_dump
|
|
X<do_gv_dump>
|
|
|
|
=item do_gvgv_dump
|
|
X<do_gvgv_dump>
|
|
|
|
=item do_hv_dump
|
|
X<do_hv_dump>
|
|
|
|
=item do_join
|
|
X<do_join>
|
|
|
|
=item do_magic_dump
|
|
X<do_magic_dump>
|
|
|
|
=item do_op_dump
|
|
X<do_op_dump>
|
|
|
|
=item do_open
|
|
X<do_open>
|
|
|
|
=item do_openn
|
|
X<do_openn>
|
|
|
|
=item do_pmop_dump
|
|
X<do_pmop_dump>
|
|
|
|
=item do_spawn
|
|
X<do_spawn>
|
|
|
|
=item do_spawn_nowait
|
|
X<do_spawn_nowait>
|
|
|
|
=item do_sprintf
|
|
X<do_sprintf>
|
|
|
|
=item do_sv_dump
|
|
X<do_sv_dump>
|
|
|
|
=item doing_taint
|
|
X<doing_taint>
|
|
|
|
=item doref
|
|
X<doref>
|
|
|
|
=item dounwind
|
|
X<dounwind>
|
|
|
|
=item dowantarray
|
|
X<dowantarray>
|
|
|
|
=item dump_eval
|
|
X<dump_eval>
|
|
|
|
=item dump_form
|
|
X<dump_form>
|
|
|
|
=item dump_indent
|
|
X<dump_indent>
|
|
|
|
=item dump_mstats
|
|
X<dump_mstats>
|
|
|
|
=item dump_sub
|
|
X<dump_sub>
|
|
|
|
=item dump_vindent
|
|
X<dump_vindent>
|
|
|
|
=item filter_del
|
|
X<filter_del>
|
|
|
|
=item filter_read
|
|
X<filter_read>
|
|
|
|
=item foldEQ_latin1
|
|
X<foldEQ_latin1>
|
|
|
|
=item form_nocontext
|
|
X<form_nocontext>
|
|
|
|
=item fp_dup
|
|
X<fp_dup>
|
|
|
|
=item free_global_struct
|
|
X<free_global_struct>
|
|
|
|
=item free_tmps
|
|
X<free_tmps>
|
|
|
|
=item get_context
|
|
X<get_context>
|
|
|
|
=item get_mstats
|
|
X<get_mstats>
|
|
|
|
=item get_op_descs
|
|
X<get_op_descs>
|
|
|
|
=item get_op_names
|
|
X<get_op_names>
|
|
|
|
=item get_ppaddr
|
|
X<get_ppaddr>
|
|
|
|
=item get_vtbl
|
|
X<get_vtbl>
|
|
|
|
=item gp_dup
|
|
X<gp_dup>
|
|
|
|
=item gp_free
|
|
X<gp_free>
|
|
|
|
=item gp_ref
|
|
X<gp_ref>
|
|
|
|
=item gv_AVadd
|
|
X<gv_AVadd>
|
|
|
|
=item gv_HVadd
|
|
X<gv_HVadd>
|
|
|
|
=item gv_IOadd
|
|
X<gv_IOadd>
|
|
|
|
=item gv_SVadd
|
|
X<gv_SVadd>
|
|
|
|
=item gv_add_by_type
|
|
X<gv_add_by_type>
|
|
|
|
=item gv_autoload4
|
|
X<gv_autoload4>
|
|
|
|
=item gv_autoload_pv
|
|
X<gv_autoload_pv>
|
|
|
|
=item gv_autoload_pvn
|
|
X<gv_autoload_pvn>
|
|
|
|
=item gv_autoload_sv
|
|
X<gv_autoload_sv>
|
|
|
|
=item gv_check
|
|
X<gv_check>
|
|
|
|
=item gv_dump
|
|
X<gv_dump>
|
|
|
|
=item gv_efullname3
|
|
X<gv_efullname3>
|
|
|
|
=item gv_efullname4
|
|
X<gv_efullname4>
|
|
|
|
=item gv_fetchfile
|
|
X<gv_fetchfile>
|
|
|
|
=item gv_fetchfile_flags
|
|
X<gv_fetchfile_flags>
|
|
|
|
=item gv_fetchpv
|
|
X<gv_fetchpv>
|
|
|
|
=item gv_fetchpvn_flags
|
|
X<gv_fetchpvn_flags>
|
|
|
|
=item gv_fetchsv
|
|
X<gv_fetchsv>
|
|
|
|
=item gv_fullname3
|
|
X<gv_fullname3>
|
|
|
|
=item gv_fullname4
|
|
X<gv_fullname4>
|
|
|
|
=item gv_handler
|
|
X<gv_handler>
|
|
|
|
=item gv_name_set
|
|
X<gv_name_set>
|
|
|
|
=item he_dup
|
|
X<he_dup>
|
|
|
|
=item hek_dup
|
|
X<hek_dup>
|
|
|
|
=item hv_common
|
|
X<hv_common>
|
|
|
|
=item hv_common_key_len
|
|
X<hv_common_key_len>
|
|
|
|
=item hv_delayfree_ent
|
|
X<hv_delayfree_ent>
|
|
|
|
=item hv_eiter_p
|
|
X<hv_eiter_p>
|
|
|
|
=item hv_eiter_set
|
|
X<hv_eiter_set>
|
|
|
|
=item hv_free_ent
|
|
X<hv_free_ent>
|
|
|
|
=item hv_ksplit
|
|
X<hv_ksplit>
|
|
|
|
=item hv_name_set
|
|
X<hv_name_set>
|
|
|
|
=item hv_placeholders_get
|
|
X<hv_placeholders_get>
|
|
|
|
=item hv_placeholders_set
|
|
X<hv_placeholders_set>
|
|
|
|
=item hv_rand_set
|
|
X<hv_rand_set>
|
|
|
|
=item hv_riter_p
|
|
X<hv_riter_p>
|
|
|
|
=item hv_riter_set
|
|
X<hv_riter_set>
|
|
|
|
=item ibcmp_utf8
|
|
X<ibcmp_utf8>
|
|
|
|
=item init_global_struct
|
|
X<init_global_struct>
|
|
|
|
=item init_stacks
|
|
X<init_stacks>
|
|
|
|
=item init_tm
|
|
X<init_tm>
|
|
|
|
=item is_lvalue_sub
|
|
X<is_lvalue_sub>
|
|
|
|
=item leave_scope
|
|
X<leave_scope>
|
|
|
|
=item load_module_nocontext
|
|
X<load_module_nocontext>
|
|
|
|
=item magic_dump
|
|
X<magic_dump>
|
|
|
|
=item markstack_grow
|
|
X<markstack_grow>
|
|
|
|
=item mess_nocontext
|
|
X<mess_nocontext>
|
|
|
|
=item mfree
|
|
X<mfree>
|
|
|
|
=item mg_dup
|
|
X<mg_dup>
|
|
|
|
=item mg_size
|
|
X<mg_size>
|
|
|
|
=item mini_mktime
|
|
X<mini_mktime>
|
|
|
|
=item moreswitches
|
|
X<moreswitches>
|
|
|
|
=item mro_get_from_name
|
|
X<mro_get_from_name>
|
|
|
|
=item mro_set_mro
|
|
X<mro_set_mro>
|
|
|
|
=item mro_set_private_data
|
|
X<mro_set_private_data>
|
|
|
|
=item my_atof
|
|
X<my_atof>
|
|
|
|
=item my_chsize
|
|
X<my_chsize>
|
|
|
|
=item my_cxt_index
|
|
X<my_cxt_index>
|
|
|
|
=item my_cxt_init
|
|
X<my_cxt_init>
|
|
|
|
=item my_dirfd
|
|
X<my_dirfd>
|
|
|
|
=item my_failure_exit
|
|
X<my_failure_exit>
|
|
|
|
=item my_fflush_all
|
|
X<my_fflush_all>
|
|
|
|
=item my_fork
|
|
X<my_fork>
|
|
|
|
=item my_lstat
|
|
X<my_lstat>
|
|
|
|
=item my_pclose
|
|
X<my_pclose>
|
|
|
|
=item my_popen
|
|
X<my_popen>
|
|
|
|
=item my_popen_list
|
|
X<my_popen_list>
|
|
|
|
=item my_socketpair
|
|
X<my_socketpair>
|
|
|
|
=item my_stat
|
|
X<my_stat>
|
|
|
|
=item my_strftime
|
|
X<my_strftime>
|
|
|
|
=item newANONATTRSUB
|
|
X<newANONATTRSUB>
|
|
|
|
=item newANONHASH
|
|
X<newANONHASH>
|
|
|
|
=item newANONLIST
|
|
X<newANONLIST>
|
|
|
|
=item newANONSUB
|
|
X<newANONSUB>
|
|
|
|
=item newATTRSUB
|
|
X<newATTRSUB>
|
|
|
|
=item newAVREF
|
|
X<newAVREF>
|
|
|
|
=item newCVREF
|
|
X<newCVREF>
|
|
|
|
=item newFORM
|
|
X<newFORM>
|
|
|
|
=item newGVREF
|
|
X<newGVREF>
|
|
|
|
=item newGVgen
|
|
X<newGVgen>
|
|
|
|
=item newGVgen_flags
|
|
X<newGVgen_flags>
|
|
|
|
=item newHVREF
|
|
X<newHVREF>
|
|
|
|
=item newHVhv
|
|
X<newHVhv>
|
|
|
|
=item newIO
|
|
X<newIO>
|
|
|
|
=item newMYSUB
|
|
X<newMYSUB>
|
|
|
|
=item newPROG
|
|
X<newPROG>
|
|
|
|
=item newRV
|
|
X<newRV>
|
|
|
|
=item newSUB
|
|
X<newSUB>
|
|
|
|
=item newSVREF
|
|
X<newSVREF>
|
|
|
|
=item newSVpvf_nocontext
|
|
X<newSVpvf_nocontext>
|
|
|
|
=item newSVsv_flags
|
|
X<newSVsv_flags>
|
|
|
|
=item new_stackinfo
|
|
X<new_stackinfo>
|
|
|
|
=item op_refcnt_lock
|
|
X<op_refcnt_lock>
|
|
|
|
=item op_refcnt_unlock
|
|
X<op_refcnt_unlock>
|
|
|
|
=item parser_dup
|
|
X<parser_dup>
|
|
|
|
=item perl_alloc_using
|
|
X<perl_alloc_using>
|
|
|
|
=item perl_clone_using
|
|
X<perl_clone_using>
|
|
|
|
=item perly_sighandler
|
|
X<perly_sighandler>
|
|
|
|
=item pmop_dump
|
|
X<pmop_dump>
|
|
|
|
=item pop_scope
|
|
X<pop_scope>
|
|
|
|
=item pregcomp
|
|
X<pregcomp>
|
|
|
|
=item pregexec
|
|
X<pregexec>
|
|
|
|
=item pregfree
|
|
X<pregfree>
|
|
|
|
=item pregfree2
|
|
X<pregfree2>
|
|
|
|
=item ptr_table_fetch
|
|
X<ptr_table_fetch>
|
|
|
|
=item ptr_table_free
|
|
X<ptr_table_free>
|
|
|
|
=item ptr_table_new
|
|
X<ptr_table_new>
|
|
|
|
=item ptr_table_split
|
|
X<ptr_table_split>
|
|
|
|
=item ptr_table_store
|
|
X<ptr_table_store>
|
|
|
|
=item push_scope
|
|
X<push_scope>
|
|
|
|
=item re_compile
|
|
X<re_compile>
|
|
|
|
=item re_dup_guts
|
|
X<re_dup_guts>
|
|
|
|
=item reentrant_free
|
|
X<reentrant_free>
|
|
|
|
=item reentrant_init
|
|
X<reentrant_init>
|
|
|
|
=item reentrant_retry
|
|
X<reentrant_retry>
|
|
|
|
=item reentrant_size
|
|
X<reentrant_size>
|
|
|
|
=item ref
|
|
X<ref>
|
|
|
|
=item reg_named_buff_all
|
|
X<reg_named_buff_all>
|
|
|
|
=item reg_named_buff_exists
|
|
X<reg_named_buff_exists>
|
|
|
|
=item reg_named_buff_fetch
|
|
X<reg_named_buff_fetch>
|
|
|
|
=item reg_named_buff_firstkey
|
|
X<reg_named_buff_firstkey>
|
|
|
|
=item reg_named_buff_nextkey
|
|
X<reg_named_buff_nextkey>
|
|
|
|
=item reg_named_buff_scalar
|
|
X<reg_named_buff_scalar>
|
|
|
|
=item regdump
|
|
X<regdump>
|
|
|
|
=item regdupe_internal
|
|
X<regdupe_internal>
|
|
|
|
=item regexec_flags
|
|
X<regexec_flags>
|
|
|
|
=item regfree_internal
|
|
X<regfree_internal>
|
|
|
|
=item reginitcolors
|
|
X<reginitcolors>
|
|
|
|
=item regnext
|
|
X<regnext>
|
|
|
|
=item repeatcpy
|
|
X<repeatcpy>
|
|
|
|
=item rsignal_state
|
|
X<rsignal_state>
|
|
|
|
=item runops_debug
|
|
X<runops_debug>
|
|
|
|
=item runops_standard
|
|
X<runops_standard>
|
|
|
|
=item rvpv_dup
|
|
X<rvpv_dup>
|
|
|
|
=item safesyscalloc
|
|
X<safesyscalloc>
|
|
|
|
=item safesysfree
|
|
X<safesysfree>
|
|
|
|
=item safesysmalloc
|
|
X<safesysmalloc>
|
|
|
|
=item safesysrealloc
|
|
X<safesysrealloc>
|
|
|
|
=item save_I16
|
|
X<save_I16>
|
|
|
|
=item save_I32
|
|
X<save_I32>
|
|
|
|
=item save_I8
|
|
X<save_I8>
|
|
|
|
=item save_adelete
|
|
X<save_adelete>
|
|
|
|
=item save_aelem
|
|
X<save_aelem>
|
|
|
|
=item save_aelem_flags
|
|
X<save_aelem_flags>
|
|
|
|
=item save_alloc
|
|
X<save_alloc>
|
|
|
|
=item save_ary
|
|
X<save_ary>
|
|
|
|
=item save_bool
|
|
X<save_bool>
|
|
|
|
=item save_clearsv
|
|
X<save_clearsv>
|
|
|
|
=item save_delete
|
|
X<save_delete>
|
|
|
|
=item save_destructor
|
|
X<save_destructor>
|
|
|
|
=item save_destructor_x
|
|
X<save_destructor_x>
|
|
|
|
=item save_freeop
|
|
X<save_freeop>
|
|
|
|
=item save_freepv
|
|
X<save_freepv>
|
|
|
|
=item save_freesv
|
|
X<save_freesv>
|
|
|
|
=item save_generic_pvref
|
|
X<save_generic_pvref>
|
|
|
|
=item save_generic_svref
|
|
X<save_generic_svref>
|
|
|
|
=item save_hdelete
|
|
X<save_hdelete>
|
|
|
|
=item save_helem
|
|
X<save_helem>
|
|
|
|
=item save_helem_flags
|
|
X<save_helem_flags>
|
|
|
|
=item save_hints
|
|
X<save_hints>
|
|
|
|
=item save_hptr
|
|
X<save_hptr>
|
|
|
|
=item save_int
|
|
X<save_int>
|
|
|
|
=item save_item
|
|
X<save_item>
|
|
|
|
=item save_iv
|
|
X<save_iv>
|
|
|
|
=item save_mortalizesv
|
|
X<save_mortalizesv>
|
|
|
|
=item save_op
|
|
X<save_op>
|
|
|
|
=item save_padsv_and_mortalize
|
|
X<save_padsv_and_mortalize>
|
|
|
|
=item save_pptr
|
|
X<save_pptr>
|
|
|
|
=item save_pushi32ptr
|
|
X<save_pushi32ptr>
|
|
|
|
=item save_pushptr
|
|
X<save_pushptr>
|
|
|
|
=item save_pushptrptr
|
|
X<save_pushptrptr>
|
|
|
|
=item save_re_context
|
|
X<save_re_context>
|
|
|
|
=item save_set_svflags
|
|
X<save_set_svflags>
|
|
|
|
=item save_shared_pvref
|
|
X<save_shared_pvref>
|
|
|
|
=item save_sptr
|
|
X<save_sptr>
|
|
|
|
=item save_svref
|
|
X<save_svref>
|
|
|
|
=item save_vptr
|
|
X<save_vptr>
|
|
|
|
=item savestack_grow
|
|
X<savestack_grow>
|
|
|
|
=item savestack_grow_cnt
|
|
X<savestack_grow_cnt>
|
|
|
|
=item scan_num
|
|
X<scan_num>
|
|
|
|
=item scan_vstring
|
|
X<scan_vstring>
|
|
|
|
=item seed
|
|
X<seed>
|
|
|
|
=item set_context
|
|
X<set_context>
|
|
|
|
=item share_hek
|
|
X<share_hek>
|
|
|
|
=item si_dup
|
|
X<si_dup>
|
|
|
|
=item ss_dup
|
|
X<ss_dup>
|
|
|
|
=item stack_grow
|
|
X<stack_grow>
|
|
|
|
=item start_subparse
|
|
X<start_subparse>
|
|
|
|
=item str_to_version
|
|
X<str_to_version>
|
|
|
|
=item sv_2iv
|
|
X<sv_2iv>
|
|
|
|
=item sv_2pv
|
|
X<sv_2pv>
|
|
|
|
=item sv_2pvbyte_flags
|
|
X<sv_2pvbyte_flags>
|
|
|
|
=item sv_2pvutf8_flags
|
|
X<sv_2pvutf8_flags>
|
|
|
|
=item sv_2uv
|
|
X<sv_2uv>
|
|
|
|
=item sv_catpvf_mg_nocontext
|
|
X<sv_catpvf_mg_nocontext>
|
|
|
|
=item sv_catpvf_nocontext
|
|
X<sv_catpvf_nocontext>
|
|
|
|
=item sv_dup
|
|
X<sv_dup>
|
|
|
|
=item sv_dup_inc
|
|
X<sv_dup_inc>
|
|
|
|
=item sv_peek
|
|
X<sv_peek>
|
|
|
|
=item sv_setpvf_mg_nocontext
|
|
X<sv_setpvf_mg_nocontext>
|
|
|
|
=item sv_setpvf_nocontext
|
|
X<sv_setpvf_nocontext>
|
|
|
|
=item sys_init
|
|
X<sys_init>
|
|
|
|
=item sys_init3
|
|
X<sys_init3>
|
|
|
|
=item sys_intern_clear
|
|
X<sys_intern_clear>
|
|
|
|
=item sys_intern_dup
|
|
X<sys_intern_dup>
|
|
|
|
=item sys_intern_init
|
|
X<sys_intern_init>
|
|
|
|
=item sys_term
|
|
X<sys_term>
|
|
|
|
=item taint_env
|
|
X<taint_env>
|
|
|
|
=item taint_proper
|
|
X<taint_proper>
|
|
|
|
=item unlnk
|
|
X<unlnk>
|
|
|
|
=item unsharepvn
|
|
X<unsharepvn>
|
|
|
|
=item vdeb
|
|
X<vdeb>
|
|
|
|
=item vform
|
|
X<vform>
|
|
|
|
=item vload_module
|
|
X<vload_module>
|
|
|
|
=item vnewSVpvf
|
|
X<vnewSVpvf>
|
|
|
|
=item vwarner
|
|
X<vwarner>
|
|
|
|
=item warn_nocontext
|
|
X<warn_nocontext>
|
|
|
|
=item warner
|
|
X<warner>
|
|
|
|
=item warner_nocontext
|
|
X<warner_nocontext>
|
|
|
|
=item whichsig
|
|
X<whichsig>
|
|
|
|
=item whichsig_pv
|
|
X<whichsig_pv>
|
|
|
|
=item whichsig_pvn
|
|
X<whichsig_pvn>
|
|
|
|
=item whichsig_sv
|
|
X<whichsig_sv>
|
|
|
|
=back
|
|
|
|
|
|
=head1 AUTHORS
|
|
|
|
Until May 1997, this document was maintained by Jeff Okamoto
|
|
<okamoto@corp.hp.com>. It is now maintained as part of Perl itself.
|
|
|
|
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,
|
|
Stephen McCamant, and Gurusamy Sarathy.
|
|
|
|
API Listing originally by Dean Roehrich <roehrich@cray.com>.
|
|
|
|
Updated to be autogenerated from comments in the source by Benjamin Stuhl.
|
|
|
|
=head1 SEE ALSO
|
|
|
|
F<config.h> L<perlapio> L<perlcall> L<perlclib> L<perlfilter> L<perlguts> L<perlintern> L<perlmroapi> L<perlxs> L<perlxstut> L<warnings>
|
|
=cut
|
|
|
|
ex: set ro:
|