################################################################################
#
#  !!!!! Do NOT edit this file directly! -- Edit PPPort_pm.PL instead. !!!!!
#
#  This file was automatically generated from the definition files in the
#  parts/inc/ subdirectory by PPPort_pm.PL. To learn more about how all this
#  works, please read the L<HACKERS> file that came with this distribution.
#
################################################################################
#
#  Perl/Pollution/Portability
#
################################################################################
#
#  Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz.
#               Copyright (C) 2018, The perl5 porters
#  Version 2.x, Copyright (C) 2001, Paul Marquess.
#  Version 1.x, Copyright (C) 1999, Kenneth Albanowski.
#
#  This program is free software; you can redistribute it and/or
#  modify it under the same terms as Perl itself.
#
################################################################################

=head1 NAME

Devel::PPPort - Perl/Pollution/Portability

=head1 SYNOPSIS

  Devel::PPPort::WriteFile();   # defaults to ./ppport.h
  Devel::PPPort::WriteFile('someheader.h');

  # Same as above but retrieve contents rather than write file
  my $contents = Devel::PPPort::GetFileContents();
  my $contents = Devel::PPPort::GetFileContents('someheader.h');

=head1 Start using Devel::PPPort for XS projects

  $ cpan Devel::PPPort
  $ perl -MDevel::PPPort -e'Devel::PPPort::WriteFile'
  $ perl ppport.h --compat-version=5.6.1 --patch=diff.patch *.xs
  $ patch -p0 < diff.patch
  $ echo ppport.h >>MANIFEST

=head1 DESCRIPTION

Perl's API has changed over time, gaining new features, new functions,
increasing its flexibility, and reducing the impact on the C namespace
environment (reduced pollution). The header file written by this module,
typically F<ppport.h>, attempts to bring some of the newer Perl API
features to older versions of Perl, so that you can worry less about
keeping track of old releases, but users can still reap the benefit.

C<Devel::PPPort> contains two functions, C<WriteFile> and C<GetFileContents>.
C<WriteFile>'s only purpose is to write the F<ppport.h> C header file.
This file contains a series of macros and, if explicitly requested, functions
that allow XS modules to be built using older versions of Perl. Currently,
Perl versions from 5.003_07 to 5.35.9 are supported.

C<GetFileContents> can be used to retrieve the file contents rather than
writing it out.

This module is used by C<h2xs> to write the file F<ppport.h>.

=head2 Why use ppport.h?

You should use F<ppport.h> in modern code so that your code will work
with the widest range of Perl interpreters possible, without significant
additional work.

You should attempt to get older code to fully use F<ppport.h>, because the
reduced pollution of newer Perl versions is an important thing. It's so
important that the old polluting ways of original Perl modules will not be
supported very far into the future, and your module will almost certainly
break! By adapting to it now, you'll gain compatibility and a sense of
having done the electronic ecology some good.

=head2 How to use ppport.h

Don't direct the users of your module to download C<Devel::PPPort>.
They are most probably not XS writers. Also, don't make F<ppport.h>
optional. Rather, just take the most recent copy of F<ppport.h> that
you can find (e.g. by generating it with the latest C<Devel::PPPort>
release from CPAN), copy it into your project, adjust your project to
use it, test it, and distribute the header along with your module.

It is important to use the most recent version of F<ppport.h>.  You do need to
test before shipping a newer version than you already had.  One possible
failure is that someone had to convert a backported element from a macro into
a function, and actual functions must be enabled with a NEED macro to minimize
the possibility of namespace pollution.  See L<HACKERS> for details.  The
developers of C<Devel::PPPort> want to hear if there are other problems that
arise from using a later F<ppport.h>.  Use
L<https://github.com/Dual-Life/Devel-PPPort/issues> to report any.

=head2 Running ppport.h

But F<ppport.h> is more than just a C header. It's also a Perl script
that can check your source code. It will suggest hints and portability
notes, and can even make suggestions on how to change your code. You
can run it like any other Perl program:

    perl ppport.h [options] [files]

It also has embedded documentation, so you can use

    perldoc ppport.h

to find out more about how to use it.

=head1 FUNCTIONS

=head2 WriteFile

C<WriteFile> takes one optional argument. When called with one
argument, it expects to be passed a filename. When called with
no arguments, it defaults to the filename F<ppport.h>.

The function returns a true value if the file was written successfully.
Otherwise it returns a false value.

=head2 GetFileContents

C<GetFileContents> behaves like C<WriteFile> above, but returns the contents
of the would-be file rather than writing it out.

=head1 COMPATIBILITY

F<ppport.h> supports Perl versions from 5.003_07 to 5.35.9
in threaded and non-threaded configurations.

=head2 Provided Perl compatibility API

The header file written by this module, typically F<ppport.h>, provides access
to the following elements of the Perl API that are not otherwise available in
Perl releases older than when the elements were first introduced.  (Note that
many of these are not supported all the way back to 5.003_07, but it may
be that they are supported back as far as you need; see L</Supported Perl API,
sorted by version> for that information.)

    _aMY_CXT
    aMY_CXT
    aMY_CXT_
    __ASSERT_
    ASSUME
    aTHX
    aTHX_
    aTHXR
    aTHXR_
    av_count
    AvFILLp
    av_tindex
    av_top_index
    BOM_UTF8
    boolSV
    call_argv
    caller_cx
    call_method
    call_pv
    call_sv
    C_ARRAY_END
    C_ARRAY_LENGTH
    cBOOL
    ckWARN
    ckWARN2
    ckWARN2_d
    ckWARN3
    ckWARN3_d
    ckWARN4
    ckWARN4_d
    ckWARN_d
    ck_warner
    ck_warner_d
    CopFILE
    CopFILEAV
    CopFILEGV
    CopFILEGV_set
    CopFILE_set
    CopFILESV
    CopSTASH
    CopSTASH_eq
    CopSTASHPV
    CopSTASHPV_set
    CopSTASH_set
    CopyD
    CPERLscope
    croak_memory_wrap
    croak_nocontext
    croak_no_modify
    croak_sv
    croak_xs_usage
    dAX
    dAXMARK
    DECLARATION_FOR_LC_NUMERIC_MANIPULATION
    DEFSV
    DEFSV_set
    die_sv
    dITEMS
    dMY_CXT
    dMY_CXT_SV
    dNOOP
    dTHR
    dTHX
    dTHXa
    dTHXoa
    dTHXR
    dUNDERBAR
    dVAR
    dXCPT
    dXSTARG
    END_EXTERN_C
    ERRSV
    eval_pv
    eval_sv
    EXTERN_C
    foldEQ_utf8
    get_av
    get_cv
    get_cvn_flags
    get_cvs
    get_hv
    get_sv
    G_METHOD
    G_RETHROW
    grok_bin
    grok_hex
    grok_number
    GROK_NUMERIC_RADIX
    grok_numeric_radix
    grok_oct
    gv_fetchpvn_flags
    gv_fetchpvs
    gv_fetchsv
    gv_init_pvn
    gv_stashpvn
    gv_stashpvs
    GvSVn
    HEf_SVKEY
    HeUTF8
    hv_fetchs
    HvNAME_get
    HvNAMELEN_get
    hv_stores
    IN_LOCALE
    IN_LOCALE_COMPILETIME
    IN_LOCALE_RUNTIME
    IN_PERL_COMPILETIME
    INT2PTR
    isALNUM
    isALNUM_A
    isALNUMC
    isALNUMC_A
    isALNUMC_L1
    isALPHA
    isALPHA_A
    isALPHA_L1
    isALPHA_LC_utf8_safe
    isALPHANUMERIC
    isALPHANUMERIC_A
    isALPHANUMERIC_L1
    isALPHANUMERIC_LC
    isALPHANUMERIC_LC_utf8_safe
    isALPHANUMERIC_utf8_safe
    isALPHANUMERIC_uvchr
    isALPHA_utf8_safe
    isALPHA_uvchr
    isASCII
    isASCII_A
    isASCII_L1
    isASCII_LC
    isASCII_utf8_safe
    isASCII_uvchr
    isBLANK
    isBLANK_A
    isBLANK_L1
    isBLANK_LC
    isBLANK_LC_utf8_safe
    isBLANK_utf8_safe
    isBLANK_uvchr
    isCNTRL
    isCNTRL_A
    isCNTRL_L1
    isCNTRL_LC_utf8_safe
    isCNTRL_utf8_safe
    isCNTRL_uvchr
    isDIGIT
    isDIGIT_A
    isDIGIT_L1
    isDIGIT_LC_utf8_safe
    isDIGIT_utf8_safe
    isDIGIT_uvchr
    isGRAPH
    isGRAPH_A
    isGRAPH_L1
    isGRAPH_LC_utf8_safe
    isGRAPH_utf8_safe
    isGRAPH_uvchr
    isGV_with_GP
    isIDCONT
    isIDCONT_A
    isIDCONT_L1
    isIDCONT_LC
    isIDCONT_LC_utf8_safe
    isIDCONT_utf8_safe
    isIDCONT_uvchr
    isIDFIRST
    isIDFIRST_A
    isIDFIRST_L1
    isIDFIRST_LC
    isIDFIRST_LC_utf8_safe
    isIDFIRST_utf8_safe
    isIDFIRST_uvchr
    is_invariant_string
    isLOWER
    isLOWER_A
    isLOWER_L1
    isLOWER_LC_utf8_safe
    isLOWER_utf8_safe
    isLOWER_uvchr
    IS_NUMBER_GREATER_THAN_UV_MAX
    IS_NUMBER_INFINITY
    IS_NUMBER_IN_UV
    IS_NUMBER_NAN
    IS_NUMBER_NEG
    IS_NUMBER_NOT_INT
    isOCTAL
    isOCTAL_A
    isOCTAL_L1
    isPRINT
    isPRINT_A
    isPRINT_L1
    isPRINT_LC_utf8_safe
    isPRINT_utf8_safe
    isPRINT_uvchr
    isPSXSPC
    isPSXSPC_A
    isPSXSPC_L1
    isPSXSPC_LC_utf8_safe
    isPSXSPC_utf8_safe
    isPSXSPC_uvchr
    isPUNCT
    isPUNCT_A
    isPUNCT_L1
    isPUNCT_LC_utf8_safe
    isPUNCT_utf8_safe
    isPUNCT_uvchr
    isSPACE
    isSPACE_A
    isSPACE_L1
    isSPACE_LC_utf8_safe
    isSPACE_utf8_safe
    isSPACE_uvchr
    isUPPER
    isUPPER_A
    isUPPER_L1
    isUPPER_LC_utf8_safe
    isUPPER_utf8_safe
    isUPPER_uvchr
    isUTF8_CHAR
    is_utf8_invariant_string
    isWORDCHAR
    isWORDCHAR_A
    isWORDCHAR_L1
    isWORDCHAR_LC
    isWORDCHAR_LC_utf8_safe
    isWORDCHAR_utf8_safe
    isWORDCHAR_uvchr
    isXDIGIT
    isXDIGIT_A
    isXDIGIT_L1
    isXDIGIT_LC
    isXDIGIT_LC_utf8_safe
    isXDIGIT_utf8_safe
    isXDIGIT_uvchr
    IVdf
    IVSIZE
    IVTYPE
    LATIN1_TO_NATIVE
    LC_NUMERIC_LOCK
    LC_NUMERIC_UNLOCK
    LIKELY
    load_module
    LOCK_LC_NUMERIC_STANDARD
    LOCK_NUMERIC_STANDARD
    memCHRs
    memEQ
    memEQs
    memNE
    memNEs
    mess
    mess_nocontext
    mess_sv
    mg_findext
    MoveD
    mPUSHi
    mPUSHn
    mPUSHp
    mPUSHs
    mPUSHu
    MUTABLE_AV
    MUTABLE_CV
    MUTABLE_GV
    MUTABLE_HV
    MUTABLE_IO
    MUTABLE_PTR
    MUTABLE_SV
    mXPUSHi
    mXPUSHn
    mXPUSHp
    mXPUSHs
    mXPUSHu
    MY_CXT
    MY_CXT_CLONE
    MY_CXT_INIT
    my_snprintf
    my_sprintf
    my_strlcat
    my_strlcpy
    my_strnlen
    NATIVE_TO_LATIN1
    NATIVE_TO_UNI
    newCONSTSUB
    newRV_inc
    newRV_noinc
    newSVpvn
    newSVpvn_flags
    newSVpvn_share
    newSVpvn_utf8
    newSVpvs
    newSVpvs_flags
    newSVpvs_share
    newSVsv_flags
    newSVsv_nomg
    newSV_type
    newSVuv
    Newx
    Newxc
    Newxz
    NOOP
    NOT_REACHED
    NUM2PTR
    NVef
    NVff
    NVgf
    NVTYPE
    OpHAS_SIBLING
    OpLASTSIB_set
    OpMAYBESIB_set
    OpMORESIB_set
    OpSIBLING
    packWARN
    packWARN2
    packWARN3
    packWARN4
    PERL_ABS
    PERL_ARGS_ASSERT_CROAK_XS_USAGE
    Perl_ck_warner
    Perl_ck_warner_d
    Perl_croak_no_modify
    PERL_HASH
    PERL_INT_MAX
    PERL_INT_MIN
    PERLIO_FUNCS_CAST
    PERLIO_FUNCS_DECL
    PERL_LONG_MAX
    PERL_LONG_MIN
    PERL_MAGIC_arylen
    PERL_MAGIC_backref
    PERL_MAGIC_bm
    PERL_MAGIC_collxfrm
    PERL_MAGIC_dbfile
    PERL_MAGIC_dbline
    PERL_MAGIC_defelem
    PERL_MAGIC_env
    PERL_MAGIC_envelem
    PERL_MAGIC_ext
    PERL_MAGIC_fm
    PERL_MAGIC_glob
    PERL_MAGIC_isa
    PERL_MAGIC_isaelem
    PERL_MAGIC_mutex
    PERL_MAGIC_nkeys
    PERL_MAGIC_overload
    PERL_MAGIC_overload_elem
    PERL_MAGIC_overload_table
    PERL_MAGIC_pos
    PERL_MAGIC_qr
    PERL_MAGIC_regdata
    PERL_MAGIC_regdatum
    PERL_MAGIC_regex_global
    PERL_MAGIC_shared
    PERL_MAGIC_shared_scalar
    PERL_MAGIC_sig
    PERL_MAGIC_sigelem
    PERL_MAGIC_substr
    PERL_MAGIC_sv
    PERL_MAGIC_taint
    PERL_MAGIC_tied
    PERL_MAGIC_tiedelem
    PERL_MAGIC_tiedscalar
    PERL_MAGIC_utf8
    PERL_MAGIC_uvar
    PERL_MAGIC_uvar_elem
    PERL_MAGIC_vec
    PERL_MAGIC_vstring
    PERL_PV_ESCAPE_ALL
    PERL_PV_ESCAPE_FIRSTCHAR
    PERL_PV_ESCAPE_NOBACKSLASH
    PERL_PV_ESCAPE_NOCLEAR
    PERL_PV_ESCAPE_QUOTE
    PERL_PV_ESCAPE_RE
    PERL_PV_ESCAPE_UNI
    PERL_PV_ESCAPE_UNI_DETECT
    PERL_PV_PRETTY_DUMP
    PERL_PV_PRETTY_ELLIPSES
    PERL_PV_PRETTY_LTGT
    PERL_PV_PRETTY_NOCLEAR
    PERL_PV_PRETTY_QUOTE
    PERL_PV_PRETTY_REGPROP
    PERL_QUAD_MAX
    PERL_QUAD_MIN
    PERL_SCAN_ALLOW_UNDERSCORES
    PERL_SCAN_DISALLOW_PREFIX
    PERL_SCAN_GREATER_THAN_UV_MAX
    PERL_SCAN_SILENT_ILLDIGIT
    PERL_SHORT_MAX
    PERL_SHORT_MIN
    PERL_SIGNALS_UNSAFE_FLAG
    PERL_STACK_OFFSET_DEFINED
    PERL_STACK_REALIGN
    PERL_STATIC_INLINE
    PERL_UCHAR_MAX
    PERL_UCHAR_MIN
    PERL_UINT_MAX
    PERL_UINT_MIN
    PERL_ULONG_MAX
    PERL_ULONG_MIN
    PERL_UNUSED_ARG
    PERL_UNUSED_CONTEXT
    PERL_UNUSED_DECL
    PERL_UNUSED_RESULT
    PERL_UNUSED_VAR
    PERL_UQUAD_MAX
    PERL_UQUAD_MIN
    PERL_USE_GCC_BRACE_GROUPS
    PERL_USHORT_MAX
    PERL_USHORT_MIN
    PERL_VERSION_EQ
    PERL_VERSION_GE
    PERL_VERSION_GT
    PERL_VERSION_LE
    PERL_VERSION_LT
    PERL_VERSION_NE
    Perl_warner
    Perl_warner_nocontext
    PL_bufend
    PL_bufptr
    PL_compiling
    PL_copline
    PL_curcop
    PL_curstash
    PL_DBsignal
    PL_DBsingle
    PL_DBsub
    PL_DBtrace
    PL_debstash
    PL_defgv
    PL_diehook
    PL_dirty
    PL_dowarn
    PL_errgv
    PL_error_count
    PL_expect
    PL_hexdigit
    PL_hints
    PL_in_my
    PL_in_my_stash
    PL_laststatval
    PL_lex_state
    PL_lex_stuff
    PL_linestr
    PL_mess_sv
    PL_na
    PL_no_modify
    PL_parser
    PL_perldb
    PL_perl_destruct_level
    PL_ppaddr
    PL_rsfp
    PL_rsfp_filters
    PL_signals
    PL_stack_base
    PL_stack_sp
    PL_statcache
    PL_stdingv
    PL_Sv
    PL_sv_arenaroot
    PL_sv_no
    PL_sv_undef
    PL_sv_yes
    PL_tainted
    PL_tainting
    PL_tokenbuf
    PL_Xpv
    _pMY_CXT
    pMY_CXT
    pMY_CXT_
    Poison
    PoisonFree
    PoisonNew
    PoisonWith
    pTHX
    pTHX_
    PTR2IV
    PTR2nat
    PTR2NV
    PTR2ul
    PTR2UV
    PTRV
    PUSHmortal
    PUSHu
    pv_display
    pv_escape
    pv_pretty
    REPLACEMENT_CHARACTER_UTF8
    RESTORE_LC_NUMERIC
    SAVE_DEFSV
    Stack_off_t
    Stack_off_t_MAX
    START_EXTERN_C
    START_MY_CXT
    start_subparse
    STMT_END
    STMT_START
    STORE_LC_NUMERIC_SET_STANDARD
    STORE_NUMERIC_SET_STANDARD
    STR_WITH_LEN
    sv_2pv
    sv_2pvbyte
    sv_2pvbyte_nolen
    sv_2pv_flags
    sv_2pv_nolen
    sv_2uv
    sv_catpvf_mg
    sv_catpvf_mg_nocontext
    sv_catpv_mg
    sv_catpvn_mg
    sv_catpvn_nomg
    sv_catpvs
    sv_catsv_mg
    sv_catsv_nomg
    SV_CONST_RETURN
    SV_COW_DROP_PV
    SV_COW_SHARED_HASH_KEYS
    SVf
    SVfARG
    SVf_UTF8
    SvGETMAGIC
    SV_GMAGIC
    SV_HAS_TRAILING_NUL
    SV_IMMEDIATE_UNREF
    SvIV_nomg
    sv_len_utf8
    sv_len_utf8_nomg
    sv_magic_portable
    SvMAGIC_set
    sv_mortalcopy_flags
    SV_MUTABLE_RETURN
    SV_NOSTEAL
    SvNV_nomg
    SvPVbyte
    SvPVCLEAR
    SvPV_const
    SvPV_flags
    SvPV_flags_const
    SvPV_flags_const_nolen
    SvPV_flags_mutable
    SvPV_force
    SvPV_force_flags
    SvPV_force_flags_mutable
    SvPV_force_flags_nolen
    SvPV_force_mutable
    SvPV_force_nolen
    SvPV_force_nomg
    SvPV_force_nomg_nolen
    SvPV_mutable
    sv_pvn_force_flags
    sv_pvn_nomg
    SvPV_nolen
    SvPV_nolen_const
    SvPV_nomg
    SvPV_nomg_const
    SvPV_nomg_const_nolen
    SvPV_nomg_nolen
    SvPV_renew
    SvPVX_const
    SvPVX_mutable
    SvPVx_nolen_const
    SvREFCNT_dec_NN
    SvREFCNT_inc
    SvREFCNT_inc_NN
    SvREFCNT_inc_simple
    SvREFCNT_inc_simple_NN
    SvREFCNT_inc_simple_void
    SvREFCNT_inc_simple_void_NN
    SvREFCNT_inc_void
    SvREFCNT_inc_void_NN
    SvRV_set
    SvRX
    SvRXOK
    sv_setiv_mg
    sv_setnv_mg
    sv_setpvf_mg
    sv_setpvf_mg_nocontext
    sv_setpv_mg
    sv_setpvn_mg
    sv_setpvs
    sv_setsv_flags
    sv_setsv_mg
    sv_setsv_nomg
    sv_setuv
    sv_setuv_mg
    SvSHARED_HASH
    SV_SMAGIC
    SvSTASH_set
    SvTRUE_nomg
    sv_unmagicext
    SvUOK
    sv_usepvn_mg
    SvUTF8
    SV_UTF8_NO_ENCODING
    sv_uv
    SvUV
    SvUV_nomg
    SvUV_set
    SvUVX
    SvUVx
    SvUVXx
    sv_vcatpvf
    sv_vcatpvf_mg
    SvVOK
    sv_vsetpvf
    sv_vsetpvf_mg
    SvVSTRING
    sv_vstring_get
    SvVSTRING_mg
    switch_to_global_locale
    sync_locale
    toFOLD_utf8_safe
    toFOLD_uvchr
    toLOWER_utf8_safe
    toLOWER_uvchr
    toTITLE_utf8_safe
    toTITLE_uvchr
    toUPPER_utf8_safe
    toUPPER_uvchr
    UNDERBAR
    UNICODE_REPLACEMENT
    UNI_TO_NATIVE
    UNLIKELY
    UNLOCK_LC_NUMERIC_STANDARD
    UNLOCK_NUMERIC_STANDARD
    UTF8_CHK_SKIP
    UTF8f
    UTF8fARG
    UTF8_IS_INVARIANT
    UTF8_MAXBYTES
    UTF8_MAXBYTES_CASE
    UTF8_SAFE_SKIP
    UTF8_SKIP
    utf8_to_uvchr
    utf8_to_uvchr_buf
    UVCHR_IS_INVARIANT
    UVCHR_SKIP
    UVof
    UVSIZE
    UVTYPE
    UVuf
    UVXf
    UVxf
    vload_module
    vmess
    vnewSVpvf
    vwarner
    WARN_ALL
    WARN_AMBIGUOUS
    WARN_ASSERTIONS
    WARN_BAREWORD
    WARN_CLOSED
    WARN_CLOSURE
    WARN_DEBUGGING
    WARN_DEPRECATED
    WARN_DIGIT
    warner
    WARN_EXEC
    WARN_EXITING
    WARN_GLOB
    WARN_INPLACE
    WARN_INTERNAL
    WARN_IO
    WARN_LAYER
    WARN_MALLOC
    WARN_MISC
    WARN_NEWLINE
    warn_nocontext
    WARN_NUMERIC
    WARN_ONCE
    WARN_OVERFLOW
    WARN_PACK
    WARN_PARENTHESIS
    WARN_PIPE
    WARN_PORTABLE
    WARN_PRECEDENCE
    WARN_PRINTF
    WARN_PROTOTYPE
    WARN_QW
    WARN_RECURSION
    WARN_REDEFINE
    WARN_REGEXP
    WARN_RESERVED
    WARN_SEMICOLON
    WARN_SEVERE
    WARN_SIGNAL
    WARN_SUBSTR
    warn_sv
    WARN_SYNTAX
    WARN_TAINT
    WARN_THREADS
    WARN_UNINITIALIZED
    WARN_UNOPENED
    WARN_UNPACK
    WARN_UNTIE
    WARN_UTF8
    WARN_VOID
    WIDEST_UTYPE
    XCPT_CATCH
    XCPT_RETHROW
    XCPT_TRY_END
    XCPT_TRY_START
    XPUSHmortal
    XPUSHu
    XSprePUSH
    XSPROTO
    XSRETURN
    XSRETURN_UV
    XST_mUV
    ZeroD

=head2 Supported Perl API, sorted by version

The table in this section lists all the Perl API elements available, sorted by
the version in which support starts.  This includes all the elements that
F<ppport.h> helps out with, as well as those elements that it doesn't.

In some cases, it doesn't make practical sense for elements to be supported
earlier than they already are.  For example, UTF-8 functionality isn't
provided prior to the release where it was first introduced.

But in other cases, it just is that no one has implemented support yet.
Patches welcome!  Some elements are ported backward for some releases, but not
all the way to 5.003_07.

If an element, call it ELEMENT, is not on this list, try using this command to
find out why:

 perl ppport.h --api-info=ELEMENT

A few of the entries in the list below are marked as DEPRECATED.  You should
not use these for new code, and should be converting existing uses to use
something better.

Some of the entries in the list are marked as "experimental".  This means
these should not generally be used.  They may be removed or changed without
notice.  You can ask why they are experimental by sending email to
L<mailto:perl5-porters@perl.org>.

And some of the entries are marked as "undocumented".  This means that they
aren't necessarily considered stable, and could be changed or removed in some
future release without warning.  It is therefore a bad idea to use them
without further checking.  It could be that these are considered to be for
perl core use only; or it could be, though, that C<Devel::PPPort> doesn't know
where to find their documentation, or that it's just an oversight that they
haven't been documented.  If you want to use one, and potentially have it
backported, first send mail to L<mailto:perl5-porters@perl.org>.

=over 4

=item perl 5.35.9

  NV_ZERO_IS_ALLBITS_ZERO
  PERL_INC_VERSION_LIST
  sv_numeq
  sv_numeq_flags
  sv_streq
  sv_streq_flags
  USE_C_BACKTRACE
  WARN_EXPERIMENTAL__ARGS_ARRAY_WITH_SIGNATURES
  WARN_EXPERIMENTAL__BUILTIN

=item perl 5.35.8

  op_wrap_finally  (marked experimental)

=item perl 5.35.7

  phase_name

=item perl 5.35.6

  CopFILEAVn
  sv_setpvn_fresh

=item perl 5.35.5

  SAVESTRLEN
  WARN_EXPERIMENTAL__FOR_LIST

=item perl 5.35.4

  newDEFEROP  (marked experimental)
  PERL_THREAD_LOCAL
  ST_DEV_SIGN
  ST_DEV_SIZE
  SvIsBOOL
  sv_setbool
  sv_setbool_mg
  sv_setrv_inc
  sv_setrv_inc_mg
  sv_setrv_noinc
  sv_setrv_noinc_mg
  WARN_EXPERIMENTAL__DEFER

=item perl 5.35.1

  av_new_alloc
  HAS_FFS
  HAS_FFSL
  HAS_NL_LANGINFO_L
  HAS_NON_INT_BITFIELDS
  HAS_STRXFRM_L
  newAV_alloc_x
  newAV_alloc_xz

=item perl 5.33.8

  cophh_exists_pv  (marked experimental)
  cophh_exists_pvn  (marked experimental)
  cophh_exists_pvs  (marked experimental)
  cophh_exists_sv  (marked experimental)
  cop_hints_exists_pv
  cop_hints_exists_pvn
  cop_hints_exists_pvs
  cop_hints_exists_sv

=item perl 5.33.7

  newTRYCATCHOP  (marked experimental)
  WARN_EXPERIMENTAL__TRY

=item perl 5.33.5

  GETENV_PRESERVES_OTHER_THREAD
  pad_compname_type  (DEPRECATED)

=item perl 5.33.2

  pack_cat  (DEPRECATED)

=item perl 5.32.1

  GDBMNDBM_H_USES_PROTOTYPES
  HAS_DBMINIT_PROTO
  HAS_SOCKADDR_STORAGE
  I_DBM
  I_NDBM
  NDBM_H_USES_PROTOTYPES

=item perl 5.31.9

  UNI_DISPLAY_BACKSPACE

=item perl 5.31.7

  HASATTRIBUTE_ALWAYS_INLINE
  HAS_ISLESS
  HAS_WCRTOMB
  sv_isa_sv  (marked experimental)
  WARN_EXPERIMENTAL__ISA

=item perl 5.31.5

  isALPHANUMERIC_utf8
  isALPHA_utf8
  isASCII_utf8
  isBLANK_utf8
  isCNTRL_utf8
  isDIGIT_utf8
  isGRAPH_utf8
  isIDCONT_utf8
  isIDFIRST_utf8
  isLOWER_utf8
  isPRINT_utf8
  isPSXSPC_utf8
  isPUNCT_utf8
  isSPACE_utf8
  isUPPER_utf8
  isWORDCHAR_utf8
  isXDIGIT_utf8
  toFOLD_utf8
  toLOWER_utf8
  toTITLE_utf8
  toUPPER_utf8

=item perl 5.31.4

  cop_fetch_label  (marked experimental)
  cop_store_label  (marked experimental)
  sv_2pvbyte_flags  (undocumented)
  sv_2pvutf8_flags  (undocumented)
  sv_nolocking  (DEPRECATED)
  SvPVbyte_nomg
  SvPVbyte_or_null
  SvPVbyte_or_null_nomg
  SvPVutf8_nomg
  SvPVutf8_or_null
  SvPVutf8_or_null_nomg
  sv_utf8_downgrade_flags
  sv_utf8_downgrade_nomg

=item perl 5.31.3

  parse_subsignature  (marked experimental)
  SANE_ERRSV
  STORE_LC_NUMERIC_SET_TO_NEEDED_IN
  WITH_LC_NUMERIC_SET_TO_NEEDED
  WITH_LC_NUMERIC_SET_TO_NEEDED_IN

=item perl 5.29.10

  my_strtod
  Strtod

=item perl 5.29.9

  HAS_TOWLOWER
  HAS_TOWUPPER
  I_WCTYPE
  WARN_EXPERIMENTAL__PRIVATE_USE
  WARN_EXPERIMENTAL__UNIPROP_WILDCARDS
  WARN_EXPERIMENTAL__VLB

=item perl 5.27.11

  HAS_DUPLOCALE
  HAS_STRTOD_L

=item perl 5.27.9

  PERL_MAGIC_nonelem
  thread_locale_init  (marked experimental)  (undocumented)
  thread_locale_term  (marked experimental)  (undocumented)
  utf8n_to_uvchr_msgs
  uvchr_to_utf8_flags_msgs
  WARN_EXPERIMENTAL__ALPHA_ASSERTIONS

=item perl 5.27.8

  HAS_ACCEPT4
  HAS_DUP3
  HAS_MKOSTEMP
  HAS_PIPE2
  newWHENOP
  WARN_EXPERIMENTAL__SCRIPT_RUN

=item perl 5.27.7

  WARN_SHADOW

=item perl 5.27.6

  HAS_MBRLEN
  HAS_MBRTOWC
  HAS_NANOSLEEP
  HAS_STRNLEN
  HAS_STRTOLD_L
  HAS_THREAD_SAFE_NL_LANGINFO_L
  I_WCHAR
  wrap_keyword_plugin  (marked experimental)

=item perl 5.27.5

  HAS_MEMRCHR

=item perl 5.27.4

  HAS_FCHMODAT
  HAS_LINKAT
  HAS_OPENAT
  HAS_RENAMEAT
  HAS_UNLINKAT
  mg_freeext
  Perl_langinfo
  sv_rvunweaken

=item perl 5.27.3

  cv_get_call_checker_flags
  PL_sv_zero
  sv_string_from_errnum

=item perl 5.27.2

  Perl_setlocale
  UNICODE_DISALLOW_PERL_EXTENDED
  UNICODE_WARN_PERL_EXTENDED
  UTF8_DISALLOW_PERL_EXTENDED
  UTF8_GOT_PERL_EXTENDED
  UTF8_WARN_PERL_EXTENDED

=item perl 5.27.1

  is_utf8_invariant_string_loc

=item perl 5.25.11

  DEFAULT_INC_EXCLUDES_DOT

=item perl 5.25.10

  op_class

=item perl 5.25.9

  isASCII_LC_utf8_safe

=item perl 5.25.8

  sv_set_undef

=item perl 5.25.7

  CLEAR_ERRSV
  DOUBLE_HAS_NEGATIVE_ZERO
  DOUBLE_HAS_SUBNORMALS
  DOUBLE_STYLE_IEEE
  LONG_DOUBLE_STYLE_IEEE
  LONG_DOUBLE_STYLE_IEEE_EXTENDED
  utf8_hop_back
  utf8_hop_forward
  utf8_hop_safe

=item perl 5.25.6

  DOUBLE_IS_CRAY_SINGLE_64_BIT
  DOUBLE_IS_IBM_DOUBLE_64_BIT
  DOUBLE_IS_IBM_SINGLE_32_BIT
  is_c9strict_utf8_string
  is_c9strict_utf8_string_loc
  is_c9strict_utf8_string_loclen
  is_strict_utf8_string
  is_strict_utf8_string_loc
  is_strict_utf8_string_loclen
  is_utf8_fixed_width_buf_flags
  is_utf8_fixed_width_buf_loc_flags
  is_utf8_fixed_width_buf_loclen_flags
  is_utf8_string_flags
  is_utf8_string_loc_flags
  is_utf8_string_loclen_flags
  SvPVCLEAR
  sv_setpv_bufsize
  UTF8_GOT_CONTINUATION
  UTF8_GOT_EMPTY
  UTF8_GOT_LONG
  UTF8_GOT_NONCHAR
  UTF8_GOT_NON_CONTINUATION
  UTF8_GOT_OVERFLOW
  UTF8_GOT_SHORT
  UTF8_GOT_SUPER
  UTF8_GOT_SURROGATE
  utf8n_to_uvchr_error

=item perl 5.25.5

  isC9_STRICT_UTF8_CHAR
  isSTRICT_UTF8_CHAR
  isUTF8_CHAR_flags
  is_utf8_valid_partial_char
  is_utf8_valid_partial_char_flags
  UNICODE_DISALLOW_ILLEGAL_C9_INTERCHANGE
  UNICODE_WARN_ILLEGAL_C9_INTERCHANGE
  UTF8_DISALLOW_ILLEGAL_C9_INTERCHANGE
  UTF8_WARN_ILLEGAL_C9_INTERCHANGE

=item perl 5.25.4

  HAS_GAI_STRERROR
  I_XLOCALE
  LONG_DOUBLE_IS_VAX_H_FLOAT

=item perl 5.25.3

  DOUBLE_HAS_INF
  DOUBLE_HAS_NAN
  DOUBLE_IS_VAX_D_FLOAT
  DOUBLE_IS_VAX_F_FLOAT
  DOUBLE_IS_VAX_G_FLOAT
  hv_bucket_ratio  (marked experimental)
  WARN_EXPERIMENTAL__DECLARED_REFS

=item perl 5.25.2

  HAS_STRERROR_L

=item perl 5.25.1

  op_parent

=item perl 5.24.0

  HAS_MEMMEM

=item perl 5.23.9

  HAS_FREELOCALE
  HAS_NEWLOCALE
  HAS_USELOCALE

=item perl 5.23.8

  clear_defarray  (undocumented)
  HAS_SIGINFO_SI_ADDR
  HAS_SIGINFO_SI_BAND
  HAS_SIGINFO_SI_ERRNO
  HAS_SIGINFO_SI_PID
  HAS_SIGINFO_SI_STATUS
  HAS_SIGINFO_SI_UID
  HAS_SIGINFO_SI_VALUE
  leave_adjust_stacks  (marked experimental)  (undocumented)
  Perl_savetmps  (undocumented)

=item perl 5.23.6

  LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_BE
  LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_LE
  LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_BE
  LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_LE
  UNICODE_DISALLOW_ABOVE_31_BIT
  UNICODE_WARN_ABOVE_31_BIT

=item perl 5.23.5

  HAS_FSTATFS
  HAS_FSTATVFS
  HAS_GETMNTENT
  HAS_HASMNTOPT
  HAS_STRUCT_STATFS
  HAS_STRUCT_STATFS_F_FLAGS
  HAS_USTAT
  I_MNTENT
  I_SYS_MOUNT
  I_SYS_STATFS
  I_SYS_STATVFS
  I_SYS_VFS
  I_USTAT
  sv_ref

=item perl 5.23.2

  INT64_C
  UINT64_C
  UTF8_IS_NONCHAR
  UTF8_IS_SUPER
  UTF8_IS_SURROGATE

=item perl 5.23.0

  DOUBLEINFBYTES
  DOUBLEMANTBITS
  DOUBLENANBYTES
  LONGDBLINFBYTES
  LONGDBLMANTBITS
  LONGDBLNANBYTES
  NVMANTBITS

=item perl 5.21.10

  DECLARATION_FOR_LC_NUMERIC_MANIPULATION
  RESTORE_LC_NUMERIC
  STORE_LC_NUMERIC_FORCE_TO_UNDERLYING
  STORE_LC_NUMERIC_SET_TO_NEEDED

=item perl 5.21.9

  HAS_LLRINTL
  HAS_LLROUNDL
  HAS_LRINTL
  HAS_LROUNDL
  WARN_EXPERIMENTAL__BITWISE

=item perl 5.21.8

  sv_get_backrefs  (marked experimental)
  WARN_EXPERIMENTAL__CONST_ATTR
  WARN_EXPERIMENTAL__RE_STRICT

=item perl 5.21.7

  HAS_REGCOMP
  HAS_STAT
  I_GDBM
  I_GDBMNDBM
  newPADNAMELIST  (marked experimental)
  newPADNAMEouter  (marked experimental)
  newPADNAMEpvn  (marked experimental)
  newUNOP_AUX
  padnamelist_fetch  (marked experimental)
  PadnamelistREFCNT  (marked experimental)
  PadnamelistREFCNT_dec  (marked experimental)
  padnamelist_store  (marked experimental)
  PadnameREFCNT  (marked experimental)
  PadnameREFCNT_dec  (marked experimental)
  PADNAMEt_OUTER

=item perl 5.21.6

  block_end
  block_start
  DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN
  DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIAN
  DOUBLE_IS_IEEE_754_32_BIT_BIG_ENDIAN
  DOUBLE_IS_IEEE_754_32_BIT_LITTLE_ENDIAN
  DOUBLE_IS_IEEE_754_64_BIT_BIG_ENDIAN
  DOUBLE_IS_IEEE_754_64_BIT_LITTLE_ENDIAN
  DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_BE_LE
  DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_LE_BE
  DOUBLE_IS_UNKNOWN_FORMAT
  DOUBLEKIND
  HAS_ASINH
  HAS_ATANH
  HAS_CBRT
  HAS_COPYSIGN
  HAS_ERF
  HAS_ERFC
  HAS_EXP2
  HAS_EXPM1
  HAS_FDIM
  HAS_FMA
  HAS_FMAX
  HAS_FMIN
  HAS_HYPOT
  HAS_ILOGB
  HAS_ISNORMAL
  HAS_LGAMMA
  HAS_LGAMMA_R
  HAS_LLRINT
  HAS_LLROUND
  HAS_LOG1P
  HAS_LOG2
  HAS_LOGB
  HAS_LRINT
  HAS_LROUND
  HAS_NAN
  HAS_NEARBYINT
  HAS_NEXTAFTER
  HAS_NEXTTOWARD
  HAS_REMAINDER
  HAS_REMQUO
  HAS_RINT
  HAS_ROUND
  HAS_SCALBN
  HAS_TGAMMA
  HAS_TRUNC
  intro_my
  newDEFSVOP
  op_convert_list
  WARN_LOCALE

=item perl 5.21.5

  cv_name
  CV_NAME_NOTQUAL
  HAS_LC_MONETARY_2008
  newMETHOP
  newMETHOP_named
  PERL_MAGIC_debugvar
  PERL_MAGIC_lvref
  SV_CATBYTES
  SV_CATUTF8
  WARN_EXPERIMENTAL__REFALIASING

=item perl 5.21.4

  CALL_CHECKER_REQUIRE_GV
  cv_set_call_checker_flags
  grok_infnan
  HAS_ACOSH
  HAS_FEGETROUND
  HAS_FPCLASSIFY
  HAS_ISFINITE
  HAS_ISINFL
  HAS_J0
  HAS_J0L
  HAS_TRUNCL
  I_FENV
  isinfnan
  I_STDINT
  Perl_acos
  Perl_asin
  Perl_atan
  Perl_cosh
  Perl_log10
  Perl_sinh
  Perl_tan
  Perl_tanh

=item perl 5.21.3

  HAS_LDEXPL
  LONG_DOUBLE_IS_DOUBLE
  LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BIG_ENDIAN
  LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LITTLE_ENDIAN
  LONG_DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN
  LONG_DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIAN
  LONG_DOUBLE_IS_UNKNOWN_FORMAT
  LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN
  LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN
  LONG_DOUBLEKIND
  Perl_ldexp

=item perl 5.21.2

  grok_number_flags
  op_sibling_splice
  PERL_SCAN_TRAILING
  WARN_MISSING
  WARN_REDUNDANT

=item perl 5.21.1

  HAS_BACKTRACE
  HAS_DLADDR
  HAS_PTRDIFF_T
  HAS_WCSCMP
  HAS_WCSXFRM
  I_EXECINFO
  markstack_grow  (undocumented)

=item perl 5.19.10

  OP_TYPE_IS_OR_WAS

=item perl 5.19.9

  WARN_EXPERIMENTAL__SIGNATURES

=item perl 5.19.7

  OP_TYPE_IS

=item perl 5.19.5

  WARN_EXPERIMENTAL__POSTDEREF

=item perl 5.19.4

  IS_SAFE_SYSCALL
  is_safe_syscall
  WARN_SYSCALLS

=item perl 5.19.3

  PERL_EXIT_ABORT
  PERL_EXIT_WARN
  sv_pos_b2u_flags

=item perl 5.19.2

  G_METHOD_NAMED

=item perl 5.19.1

  toFOLD
  toFOLD_A
  toLOWER_A
  toLOWER_L1
  toTITLE
  toTITLE_A
  toUPPER_A

=item perl 5.18.0

  hv_rand_set  (undocumented)

=item perl 5.17.11

  WARN_EXPERIMENTAL__SMARTMATCH

=item perl 5.17.8

  isALPHANUMERIC_LC_uvchr
  isIDCONT_LC_uvchr
  WARN_EXPERIMENTAL__REGEX_SETS

=item perl 5.17.7

  isALNUMC_LC_uvchr
  isASCII_LC_uvchr
  isBLANK_LC_uvchr
  isPSXSPC_LC_uvchr
  isWORDCHAR_LC_uvchr
  isXDIGIT_LC_uvchr
  SvREFCNT_dec_NN
  SvTRUE_NN
  SvTRUE_nomg_NN

=item perl 5.17.6

  READ_XDIGIT

=item perl 5.17.5

  WARN_EXPERIMENTAL__LEXICAL_SUBS

=item perl 5.17.4

  GV_SUPER
  HAS_IP_MREQ_SOURCE
  newMYSUB  (undocumented)
  newSVpadname  (marked experimental)
  PadARRAY  (marked experimental)
  PadlistARRAY  (marked experimental)
  PadlistMAX  (marked experimental)
  PadlistNAMES  (marked experimental)
  PadlistNAMESARRAY  (marked experimental)
  PadlistNAMESMAX  (marked experimental)
  PadlistREFCNT  (marked experimental)
  PadMAX  (marked experimental)
  PadnameLEN  (marked experimental)
  PadnamelistARRAY  (marked experimental)
  PadnamelistMAX  (marked experimental)
  PadnamePV  (marked experimental)
  PadnameSV  (marked experimental)
  PadnameUTF8  (marked experimental)
  PL_comppad_name  (marked experimental)
  WARN_EXPERIMENTAL

=item perl 5.17.2

  HAS_IP_MREQ
  PERL_RELOCATABLE_INC
  sv_copypv_flags
  sv_copypv_nomg
  sv_vcatpvfn_flags

=item perl 5.17.1

  alloccopstash  (marked experimental)
  CopSTASHPV_set

=item perl 5.16.0

  CopLABEL_len
  CopLABEL_len_flags

=item perl 5.15.8

  HAS_IPV6_MREQ
  HAS_SOCKADDR_IN6
  is_utf8_char_buf
  wrap_op_checker

=item perl 5.15.7

  HAS_ISBLANK

=item perl 5.15.6

  newCONSTSUB_flags

=item perl 5.15.4

  gv_autoload_pv  (undocumented)
  gv_autoload_pvn  (undocumented)
  gv_autoload_sv  (undocumented)
  gv_fetchmethod_pv_flags  (marked experimental)  (undocumented)
  gv_fetchmethod_pvn_flags  (marked experimental)  (undocumented)
  gv_fetchmethod_sv_flags  (marked experimental)  (undocumented)
  gv_fetchmeth_pv
  gv_fetchmeth_pv_autoload
  gv_fetchmeth_pvn
  gv_fetchmeth_pvn_autoload
  gv_fetchmeth_sv
  gv_fetchmeth_sv_autoload
  gv_init_pv
  gv_init_sv
  HvENAMELEN
  HvENAMEUTF8
  HvNAMELEN
  HvNAMEUTF8
  newGVgen_flags  (undocumented)
  sv_derived_from_pv
  sv_derived_from_pvn
  sv_derived_from_sv
  sv_does_pv
  sv_does_pvn
  sv_does_sv
  whichsig_pv
  whichsig_pvn
  whichsig_sv

=item perl 5.15.3

  GV_ADDMG
  gv_fetchsv_nomg
  GV_NO_SVGMAGIC
  I_STDBOOL
  QUAD_IS___INT64

=item perl 5.15.2

  ST_INO_SIGN
  ST_INO_SIZE
  XS_EXTERNAL  (undocumented)
  XS_INTERNAL  (undocumented)

=item perl 5.15.1

  cv_clone
  pad_add_anon
  pad_add_name_pv
  pad_add_name_pvn
  pad_add_name_pvs
  pad_add_name_sv
  pad_alloc  (marked experimental)
  pad_findmy_pv
  pad_findmy_pvn
  pad_findmy_pvs
  pad_findmy_sv
  pad_new
  pad_tidy  (