- NAME
- SYNOPSIS
- DESCRIPTION
  - Why use ppport.h?
  - How to use ppport.h
  - Running ppport.h
- FUNCTIONS
  - WriteFile
  - GetFileContents
- COMPATIBILITY
  - Provided Perl compatibility API
  - Perl API not supported by ppport.h
- BUGS
- AUTHORS
- COPYRIGHT
- SEE ALSO

# NAME

Devel::PPPort - Perl/Pollution/Portability

# 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');

# 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 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.

`Devel::PPPort` contains two functions, `WriteFile` and `GetFileContents`. `WriteFile`'s only purpose is to write the 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 to 5.20 are supported.

`GetFileContents` can be used to retrieve the file contents rather than writing it out.

This module is used by `h2xs` to write the file ppport.h.

## Why use ppport.h?

You should use 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 older code to fully use 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.

## How to use ppport.h

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

## Running ppport.h

But 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.

# FUNCTIONS

## WriteFile

`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 ppport.h.

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

## GetFileContents

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

# COMPATIBILITY

ppport.h supports Perl versions from 5.003 to 5.20 in threaded and non-threaded configurations.

## Provided Perl compatibility API

The header file written by this module, typically ppport.h, provides access to the following elements of the Perl API that is not available in older Perl releases:

        _aMY_CXT
        _pMY_CXT
        aMY_CXT
        aMY_CXT_
        aTHX
        aTHX_
        aTHXR
        aTHXR_
        AvFILLp
        boolSV
        C_ARRAY_END
        C_ARRAY_LENGTH
        call_argv
        call_method
        call_pv
        call_sv
        caller_cx
        cBOOL
        ckWARN
        CopFILE
        CopFILE_set
        CopFILEAV
        CopFILEGV
        CopFILEGV_set
        CopFILESV
        CopSTASH
        CopSTASH_eq
        CopSTASH_set
        CopSTASHPV
        CopSTASHPV_set
        CopyD
        CPERLscope
        dAX
        dAXMARK
        DEFSV
        DEFSV_set
        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
        G_METHOD
        get_av
        get_cv
        get_cvs
        get_hv
        get_sv
        grok_bin
        grok_hex
        grok_number
        GROK_NUMERIC_RADIX
        grok_numeric_radix
        grok_oct
        gv_fetchpvn_flags
        gv_fetchpvs
        gv_stashpvn
        gv_stashpvs
        HEf_SVKEY
        HeUTF8
        hv_fetchs
        hv_stores
        HvNAME_get
        HvNAMELEN_get
        IN_LOCALE
        IN_LOCALE_COMPILETIME
        IN_LOCALE_RUNTIME
        IN_PERL_COMPILETIME
        INT2PTR
        IS_NUMBER_GREATER_THAN_UV_MAX
        IS_NUMBER_IN_UV
        IS_NUMBER_INFINITY
        IS_NUMBER_NAN
        IS_NUMBER_NEG
        IS_NUMBER_NOT_INT
        isALNUMC
        isASCII
        isBLANK
        isCNTRL
        isGRAPH
        isPRINT
        isPSXSPC
        isPUNCT
        isXDIGIT
        IVdf
        IVSIZE
        IVTYPE
        load_module
        memEQ
        memEQs
        memNE
        memNEs
        mg_findext
        MoveD
        mPUSHi
        mPUSHn
        mPUSHp
        mPUSHs
        mPUSHu
        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
        newCONSTSUB
        newRV_inc
        newRV_noinc
        newSV_type
        newSVpvn
        newSVpvn_flags
        newSVpvn_share
        newSVpvn_utf8
        newSVpvs
        newSVpvs_flags
        newSVpvs_share
        newSVuv
        Newx
        Newxc
        Newxz
        NOOP
        NUM2PTR
        NVef
        NVff
        NVgf
        NVTYPE
        OpHAS_SIBLING
        OpLASTSIB_set
        OpMAYBESIB_set
        OpMORESIB_set
        OpSIBLING
        packWARN
        PERL_ABS
        PERL_BCDVERSION
        PERL_GCC_BRACE_GROUPS_FORBIDDEN
        PERL_HASH
        PERL_INT_MAX
        PERL_INT_MIN
        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_REVISION
        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_SUBVERSION
        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
        Perl_warner
        Perl_warner_nocontext
        PERLIO_FUNCS_CAST
        PERLIO_FUNCS_DECL
        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_na
        PL_no_modify
        PL_parser
        PL_perl_destruct_level
        PL_perldb
        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
        pMY_CXT
        pMY_CXT_
        Poison
        PoisonFree
        PoisonNew
        PoisonWith
        pTHX
        pTHX_
        PTR2IV
        PTR2nat
        PTR2NV
        PTR2ul
        PTR2UV
        PTRV
        PUSHmortal
        PUSHu
        pv_display
        pv_escape
        pv_pretty
        SAVE_DEFSV
        START_EXTERN_C
        START_MY_CXT
        STMT_END
        STMT_START
        STR_WITH_LEN
        sv_2pv_flags
        sv_2pv_nolen
        sv_2pvbyte
        sv_2pvbyte_nolen
        sv_2uv
        sv_catpv_mg
        sv_catpvf_mg
        sv_catpvf_mg_nocontext
        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
        SV_GMAGIC
        SV_HAS_TRAILING_NUL
        SV_IMMEDIATE_UNREF
        sv_magic_portable
        SV_MUTABLE_RETURN
        SV_NOSTEAL
        sv_pvn_force_flags
        sv_pvn_nomg
        sv_setiv_mg
        sv_setnv_mg
        sv_setpv_mg
        sv_setpvf_mg
        sv_setpvf_mg_nocontext
        sv_setpvn_mg
        sv_setpvs
        sv_setsv_mg
        sv_setsv_nomg
        sv_setuv
        sv_setuv_mg
        SV_SMAGIC
        sv_unmagicext
        sv_usepvn_mg
        SV_UTF8_NO_ENCODING
        sv_uv
        sv_vcatpvf
        sv_vcatpvf_mg
        sv_vsetpvf
        sv_vsetpvf_mg
        SVf
        SVf_UTF8
        SVfARG
        SvGETMAGIC
        SvIV_nomg
        SvMAGIC_set
        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
        SvPV_nolen
        SvPV_nolen_const
        SvPV_nomg
        SvPV_nomg_const
        SvPV_nomg_const_nolen
        SvPV_nomg_nolen
        SvPV_renew
        SvPVbyte
        SvPVX_const
        SvPVX_mutable
        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
        SvSHARED_HASH
        SvSTASH_set
        SvUOK
        SvUV
        SvUV_nomg
        SvUV_set
        SvUVX
        SvUVx
        SvUVXx
        SvVSTRING_mg
        UNDERBAR
        UTF8_MAXBYTES
        UVof
        UVSIZE
        UVTYPE
        UVuf
        UVXf
        UVxf
        vload_module
        vnewSVpvf
        WARN_ALL
        WARN_AMBIGUOUS
        WARN_ASSERTIONS
        WARN_BAREWORD
        WARN_CLOSED
        WARN_CLOSURE
        WARN_DEBUGGING
        WARN_DEPRECATED
        WARN_DIGIT
        WARN_EXEC
        WARN_EXITING
        WARN_GLOB
        WARN_INPLACE
        WARN_INTERNAL
        WARN_IO
        WARN_LAYER
        WARN_MALLOC
        WARN_MISC
        WARN_NEWLINE
        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_SYNTAX
        WARN_TAINT
        WARN_THREADS
        WARN_UNINITIALIZED
        WARN_UNOPENED
        WARN_UNPACK
        WARN_UNTIE
        WARN_UTF8
        WARN_VOID
        warner
        WIDEST_UTYPE
        XCPT_CATCH
        XCPT_RETHROW
        XCPT_TRY_END
        XCPT_TRY_START
        XPUSHmortal
        XPUSHu
        XSprePUSH
        XSPROTO
        XSRETURN
        XSRETURN_UV
        XST_mUV
        ZeroD

## Perl API not supported by ppport.h

There is still a big part of the API not supported by ppport.h. Either because it doesn't make sense to back-port that part of the API, or simply because it hasn't been implemented yet. Patches welcome!

Here's a list of the currently unsupported API, and also the version of Perl below which it is unsupported:

perl 5.24.0

        BhkDISABLE
        BhkENABLE
        BhkENTRY_set
        MULTICALL
        PERL_SYS_TERM
        POP_MULTICALL
        PUSH_MULTICALL
        PadARRAY
        PadMAX
        PadlistARRAY
        PadlistMAX
        PadlistNAMES
        PadlistNAMESARRAY
        PadlistNAMESMAX
        PadnameLEN
        PadnamePV
        PadnameREFCNT
        PadnameREFCNT_dec
        PadnameSV
        PadnamelistARRAY
        PadnamelistMAX
        PadnamelistREFCNT
        PadnamelistREFCNT_dec
        RESTORE_LC_NUMERIC
        STORE_LC_NUMERIC_FORCE_TO_UNDERLYING
        STORE_LC_NUMERIC_SET_TO_NEEDED
        XS_APIVERSION_BOOTCHECK
        XS_EXTERNAL
        XS_INTERNAL
        XS_VERSION_BOOTCHECK
        XopDISABLE
        XopENABLE
        XopENTRY
        XopENTRYCUSTOM
        XopENTRY_set
        cophh_new_empty
        my_lstat
        my_stat
        reentrant_free
        reentrant_init
        reentrant_retry
        reentrant_size
        ref
        sv_setref_pvs

perl 5.23.9

        toFOLD_uvchr
        toLOWER_uvchr
        toTITLE_uvchr
        toUPPER_uvchr

perl 5.23.8

        clear_defarray
        cx_popblock
        cx_popeval
        cx_popformat
        cx_popgiven
        cx_poploop
        cx_popsub
        cx_popsub_args
        cx_popsub_common
        cx_popwhen
        cx_pushblock
        cx_pusheval
        cx_pushformat
        cx_pushgiven
        cx_pushloop_for
        cx_pushloop_plain
        cx_pushsub
        cx_pushwhen
        cx_topblock
        leave_adjust_stacks
        savetmps

perl 5.22.0

        UVCHR_SKIP

perl 5.21.10

        DECLARATION_FOR_LC_NUMERIC_MANIPULATION

perl 5.21.8

        sv_get_backrefs

perl 5.21.7

        PadnameUTF8
        is_invariant_string
        newPADNAMELIST
        newPADNAMEouter
        newPADNAMEpvn
        newUNOP_AUX
        padnamelist_fetch
        padnamelist_store

perl 5.21.6

        newDEFSVOP
        op_convert_list

perl 5.21.5

        cv_name
        newMETHOP
        newMETHOP_named

perl 5.21.4

        cv_set_call_checker_flags
        grok_infnan
        isinfnan
        sync_locale

perl 5.21.2

        grok_number_flags
        op_sibling_splice

perl 5.21.1

        _is_in_locale_category
        _is_utf8_char_slow
        _is_utf8_idcont
        _is_utf8_idstart
        _is_utf8_xidcont
        _is_utf8_xidstart
        isALNUM_lazy
        isIDFIRST_lazy
        isUTF8_CHAR
        markstack_grow
        my_strerror

perl 5.19.10

        OP_TYPE_IS_OR_WAS

perl 5.19.9

        _to_utf8_fold_flags
        _to_utf8_lower_flags
        _to_utf8_title_flags
        _to_utf8_upper_flags

perl 5.19.7

        OP_TYPE_IS

perl 5.19.4

        append_utf8_from_native_byte
        is_safe_syscall
        uvoffuni_to_utf8_flags

perl 5.19.3

        croak_memory_wrap
        sv_pos_b2u_flags

perl 5.19.2

        SVt_INVLIST

perl 5.19.1

        re_intuit_start
        toFOLD
        toFOLD_utf8
        toLOWER_L1
        toTITLE

perl 5.18.0

        hv_rand_set

perl 5.17.9

        av_tindex
        av_top_index

perl 5.17.8

        _is_uni_FOO
        _is_uni_perl_idcont
        _is_utf8_FOO
        _is_utf8_mark
        _is_utf8_perl_idcont
        isALPHANUMERIC
        isIDCONT

perl 5.17.7

        SvREFCNT_dec_NN
        _is_uni_perl_idstart
        _is_utf8_perl_idstart
        is_uni_alnumc
        is_uni_alnumc_lc
        is_utf8_alnumc

perl 5.17.6

        READ_XDIGIT

perl 5.17.4

        PL_comppad_name
        PadlistREFCNT
        newMYSUB
        newSVpadname

perl 5.17.2

        is_uni_blank
        is_uni_blank_lc
        is_utf8_blank
        sv_copypv_flags
        sv_copypv_nomg
        sv_vcatpvfn_flags

perl 5.15.9

        utf8_to_uvchr_buf
        utf8_to_uvuni_buf
        valid_utf8_to_uvchr
        valid_utf8_to_uvuni

perl 5.15.8

        is_utf8_char_buf
        wrap_op_checker

perl 5.15.7

        toLOWER_utf8
        toTITLE_utf8
        toUPPER_utf8
        to_utf8_fold
        to_utf8_lower
        to_utf8_title
        to_utf8_upper

perl 5.15.6

        newCONSTSUB_flags

perl 5.15.4

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

perl 5.15.1

        cop_fetch_label
        cop_store_label
        pad_add_name_pv
        pad_add_name_pvn
        pad_add_name_pvs
        pad_add_name_sv
        pad_findmy_pv
        pad_findmy_pvn
        pad_findmy_pvs
        pad_findmy_sv

perl 5.14.0

        _to_uni_fold_flags

perl 5.13.10

        foldEQ_utf8_flags
        is_utf8_xidcont
        is_utf8_xidfirst

perl 5.13.8

        foldEQ_latin1
        parse_arithexpr
        parse_fullexpr
        parse_listexpr
        parse_termexpr

perl 5.13.7

        HvENAME
        OP_CLASS
        XopFLAGS
        amagic_deref_call
        bytes_cmp_utf8
        cop_hints_2hv
        cop_hints_fetch_pv
        cop_hints_fetch_pvn
        cop_hints_fetch_pvs
        cop_hints_fetch_sv
        cophh_2hv
        cophh_copy
        cophh_delete_pv
        cophh_delete_pvn
        cophh_delete_pvs
        cophh_delete_sv
        cophh_fetch_pv
        cophh_fetch_pvn
        cophh_fetch_pvs
        cophh_fetch_sv
        cophh_free
        cophh_store_pv
        cophh_store_pvn
        cophh_store_pvs
        cophh_store_sv
        custom_op_register
        custom_op_xop
        newFOROP
        newWHILEOP
        op_lvalue
        op_scope
        parse_barestmt
        parse_block
        parse_label

perl 5.13.6

        LINKLIST
        SvTRUE_nomg
        ck_entersub_args_list
        ck_entersub_args_proto
        ck_entersub_args_proto_or_list
        cv_get_call_checker
        cv_set_call_checker
        isWORDCHAR
        lex_stuff_pv
        mg_free_type
        newSVpv_share
        op_append_elem
        op_append_list
        op_contextualize
        op_linklist
        op_prepend_elem
        parse_stmtseq
        rv2cv_op_cv
        savesharedpvs
        savesharedsvpv
        sv_2bool_flags
        sv_catpv_flags
        sv_catpv_nomg
        sv_catpvs_flags
        sv_catpvs_mg
        sv_catpvs_nomg
        sv_cmp_flags
        sv_cmp_locale_flags
        sv_collxfrm_flags
        sv_eq_flags
        sv_setpvs_mg

perl 5.13.5

        PL_rpeepp
        isOCTAL
        lex_stuff_pvs
        parse_fullstmt

perl 5.13.3

        blockhook_register
        croak_no_modify

perl 5.13.2

        SvNV_nomg
        find_rundefsv
        foldEQ
        foldEQ_locale
        foldEQ_utf8
        hv_fill
        sv_dec_nomg
        sv_inc_nomg

perl 5.13.1

        croak_sv
        die_sv
        mess_sv
        sv_2nv_flags
        warn_sv

perl 5.11.5

        sv_pos_u2b_flags

perl 5.11.4

        prescan_version

perl 5.11.2

        PL_keyword_plugin
        lex_bufutf8
        lex_discard_to
        lex_grow_linestr
        lex_next_chunk
        lex_peek_unichar
        lex_read_space
        lex_read_to
        lex_read_unichar
        lex_stuff_pvn
        lex_stuff_sv
        lex_unstuff

perl 5.11.1

        ck_warner
        ck_warner_d
        is_utf8_perl_space
        is_utf8_perl_word
        is_utf8_posix_digit

perl 5.11.0

        Gv_AMupdate
        PL_opfreehook
        SVt_REGEXP
        SvOOK_offset
        av_iter_p
        gv_add_by_type
        is_ascii_string
        pregfree2
        save_adelete
        save_aelem_flags
        save_hdelete
        save_helem_flags
        sv_utf8_upgrade_flags_grow

perl 5.10.1

        croak_xs_usage
        mro_get_from_name
        mro_get_private_data
        mro_register
        mro_set_mro
        mro_set_private_data
        save_hints
        save_padsv_and_mortalize
        save_pushi32ptr
        save_pushptr
        save_pushptrptr
        sv_insert_flags

perl 5.10.0

        hv_common
        hv_common_key_len
        sv_destroyable
        sys_init
        sys_init3
        sys_term

perl 5.9.5

        Perl_signbit
        av_create_and_push
        av_create_and_unshift_one
        gv_fetchfile_flags
        lex_start
        mro_get_linear_isa
        mro_method_changed_in
        my_dirfd
        pregcomp
        ptr_table_clear
        ptr_table_fetch
        ptr_table_free
        ptr_table_new
        ptr_table_split
        ptr_table_store
        re_compile
        reg_named_buff_all
        reg_named_buff_exists
        reg_named_buff_fetch
        reg_named_buff_firstkey
        reg_named_buff_nextkey
        reg_named_buff_scalar
        regfree_internal
        savesharedpvn
        scan_vstring
        upg_version

perl 5.9.4

        PerlIO_context_layers
        gv_name_set
        hv_copy_hints_hv
        my_vsnprintf
        newXS_flags
        regclass_swash
        sv_does
        sv_usepvn_flags

perl 5.9.3

        av_arylen_p
        ckwarn
        ckwarn_d
        csighandler
        dMULTICALL
        doref
        gv_const_sv
        hv_eiter_p
        hv_eiter_set
        hv_name_set
        hv_placeholders_get
        hv_placeholders_set
        hv_riter_p
        hv_riter_set
        is_utf8_string_loclen
        newGIVENOP
        newSVhek
        newWHENOP
        pad_compname_type
        savepvs
        sortsv_flags
        vverify

perl 5.9.2

        SvPVbyte_force
        find_rundefsvoffset
        op_refcnt_lock
        op_refcnt_unlock
        savesvpv
        vnormal

perl 5.9.1

        hv_clear_placeholders
        hv_scalar
        scan_version
        sv_2iv_flags
        sv_2uv_flags

perl 5.9.0

        new_version
        save_set_svflags
        vcmp
        vnumify
        vstringify

perl 5.8.3

        SvIsCOW
        SvIsCOW_shared_hash

perl 5.8.1

        CvPADLIST
        PL_comppad
        SvVOK
        doing_taint
        find_runcv
        is_utf8_string_loc
        packlist
        pad_add_anon
        pad_new
        pad_tidy
        save_bool
        savestack_grow_cnt
        seed
        sv_cat_decode
        sv_setpviv
        sv_setpviv_mg
        unpackstring

perl 5.8.0

        HeUTF8
        hv_iternext_flags
        hv_store_flags
        is_utf8_idcont
        nothreadhook

perl 5.7.3

        OP_DESC
        OP_NAME
        PL_peepp
        PerlIO_clearerr
        PerlIO_close
        PerlIO_eof
        PerlIO_error
        PerlIO_fileno
        PerlIO_fill
        PerlIO_flush
        PerlIO_get_base
        PerlIO_get_bufsiz
        PerlIO_get_cnt
        PerlIO_get_ptr
        PerlIO_read
        PerlIO_seek
        PerlIO_set_cnt
        PerlIO_set_ptrcnt
        PerlIO_setlinebuf
        PerlIO_stderr
        PerlIO_stdin
        PerlIO_stdout
        PerlIO_tell
        PerlIO_unread
        PerlIO_write
        SvLOCK
        SvSHARE
        SvUNLOCK
        atfork_lock
        atfork_unlock
        custom_op_desc
        custom_op_name
        deb
        debstack
        debstackptrs
        gv_fetchmeth_autoload
        ibcmp_utf8
        my_fork
        my_socketpair
        pack_cat
        perl_destruct
        pv_uni_display
        save_shared_pvref
        savesharedpv
        sortsv
        sv_magicext
        sv_nolocking
        sv_nosharing
        sv_recode_to_utf8
        sv_uni_display
        to_uni_fold
        to_uni_lower
        to_uni_title
        to_uni_upper
        to_utf8_case
        unpack_str
        uvchr_to_utf8_flags
        uvuni_to_utf8_flags
        vdeb

perl 5.7.2

        calloc
        getcwd_sv
        init_tm
        malloc
        mfree
        mini_mktime
        my_atof2
        my_strftime
        op_null
        realloc
        sv_catpvn_flags
        sv_catsv_flags
        sv_setsv_flags
        sv_utf8_upgrade_flags
        sv_utf8_upgrade_nomg
        swash_fetch

perl 5.7.1

        ASCII_TO_NEED
        NATIVE_TO_NEED
        POPpbytex
        bytes_from_utf8
        despatch_signals
        do_openn
        gv_handler
        is_lvalue_sub
        my_popen_list
        save_mortalizesv
        scan_num
        sv_force_normal_flags
        sv_setref_uv
        sv_unref_flags
        sv_utf8_upgrade
        utf8_length
        utf8_to_uvchr
        utf8_to_uvuni
        utf8n_to_uvchr
        utf8n_to_uvuni
        uvchr_to_utf8
        uvuni_to_utf8

perl 5.6.1

        SvGAMAGIC
        apply_attrs_string
        bytes_to_utf8
        gv_efullname4
        gv_fullname4
        is_utf8_string
        save_generic_pvref
        utf16_to_utf8
        utf16_to_utf8_reversed
        utf8_to_bytes

perl 5.6.0

        DO_UTF8
        PERL_SYS_INIT3
        PL_check
        POPul
        SvIOK_UV
        SvIOK_notUV
        SvIOK_only_UV
        SvPOK_only_UTF8
        SvPVbyte_nolen
        SvPVbytex
        SvPVbytex_force
        SvPVutf8
        SvPVutf8_force
        SvPVutf8_nolen
        SvPVutf8x
        SvPVutf8x_force
        SvUOK
        SvUTF8
        SvUTF8_off
        SvUTF8_on
        UTF8SKIP
        av_delete
        av_exists
        call_atexit
        caller_cx
        cast_i32
        cast_iv
        cast_ulong
        cast_uv
        do_gv_dump
        do_gvgv_dump
        do_hv_dump
        do_magic_dump
        do_op_dump
        do_open9
        do_pmop_dump
        do_sv_dump
        dump_all
        dump_eval
        dump_form
        dump_indent
        dump_packsubs
        dump_sub
        dump_vindent
        get_context
        get_ppaddr
        gv_dump
        init_i18nl10n
        init_i18nl14n
        is_uni_alnum
        is_uni_alnum_lc
        is_uni_alpha
        is_uni_alpha_lc
        is_uni_ascii
        is_uni_ascii_lc
        is_uni_cntrl
        is_uni_cntrl_lc
        is_uni_digit
        is_uni_digit_lc
        is_uni_graph
        is_uni_graph_lc
        is_uni_idfirst
        is_uni_idfirst_lc
        is_uni_lower
        is_uni_lower_lc
        is_uni_print
        is_uni_print_lc
        is_uni_punct
        is_uni_punct_lc
        is_uni_space
        is_uni_space_lc
        is_uni_upper
        is_uni_upper_lc
        is_uni_xdigit
        is_uni_xdigit_lc
        is_utf8_alnum
        is_utf8_alpha
        is_utf8_ascii
        is_utf8_char
        is_utf8_cntrl
        is_utf8_digit
        is_utf8_graph
        is_utf8_idfirst
        is_utf8_lower
        is_utf8_mark
        is_utf8_print
        is_utf8_punct
        is_utf8_space
        is_utf8_upper
        is_utf8_xdigit
        magic_dump
        mess
        my_atof
        my_fflush_all
        newANONATTRSUB
        newATTRSUB
        newXS
        newXSproto
        new_collate
        new_ctype
        new_numeric
        op_dump
        perl_parse
        pmop_dump
        re_intuit_string
        reginitcolors
        require_pv
        safesyscalloc
        safesysfree
        safesysmalloc
        safesysrealloc
        save_I8
        save_alloc
        save_destructor
        save_destructor_x
        save_re_context
        save_vptr
        scan_bin
        set_context
        set_numeric_local
        set_numeric_radix
        set_numeric_standard
        str_to_version
        sv_2pvutf8
        sv_2pvutf8_nolen
        sv_force_normal
        sv_len_utf8
        sv_pos_b2u
        sv_pos_u2b
        sv_pv
        sv_pvbyte
        sv_pvbyten
        sv_pvbyten_force
        sv_pvutf8
        sv_pvutf8n
        sv_pvutf8n_force
        sv_rvweaken
        sv_utf8_decode
        sv_utf8_downgrade
        sv_utf8_encode
        swash_init
        to_uni_lower_lc
        to_uni_title_lc
        to_uni_upper_lc
        utf8_distance
        utf8_hop
        vcroak
        vform
        vmess
        vwarn
        vwarner

perl 5.005_03

        POPpx
        get_vtbl
        save_generic_svref

perl 5.005

        PL_curpad
        PL_modglobal
        cx_dump
        debop
        debprofdump
        fbm_compile
        fbm_instr
        get_op_descs
        get_op_names
        init_stacks
        mg_length
        mg_size
        newHVhv
        new_stackinfo
        regdump
        regexec_flags
        regnext
        runops_debug
        runops_standard
        save_iv
        save_op
        sv_iv
        sv_nv
        sv_peek
        sv_pvn
        sv_pvn_nomg
        sv_true

perl 5.004_05

        CopyD
        MoveD
        do_binmode
        my_bcopy
        save_aelem
        save_helem

perl 5.004

        GIMME_V
        G_VOID
        HePV
        HeSVKEY_set
        POPu
        SvSetMagicSV
        SvSetMagicSV_nosteal
        SvSetSV_nosteal
        SvTAINTED
        SvTAINTED_off
        SvTAINTED_on
        block_end
        block_gimme
        block_start
        call_list
        delimcpy
        form
        gv_autoload4
        gv_fetchmethod_autoload
        hv_delayfree_ent
        hv_free_ent
        ibcmp_locale
        intro_my
        my_failure_exit
        newSVpvf
        rsignal
        rsignal_state
        save_I16
        save_gp
        share_hek
        start_subparse
        sv_catpvf
        sv_catpvf_mg
        sv_cmp_locale
        sv_derived_from
        sv_magic_portable
        sv_setpvf
        sv_setpvf_mg
        sv_taint
        sv_tainted
        sv_untaint
        sv_vcatpvf
        sv_vcatpvf_mg
        sv_vcatpvfn
        sv_vsetpvf
        sv_vsetpvf_mg
        sv_vsetpvfn
        toLOWER_LC
        vnewSVpvf
        warner

perl 5.003_07

        HeHASH
        HeKEY
        HeKLEN
        HeSVKEY
        HeSVKEY_force
        HeVAL
        cv_const_sv
        do_open
        gv_efullname3
        gv_fullname3
        hv_delete_ent
        hv_exists_ent
        hv_fetch_ent
        hv_iterkeysv
        hv_ksplit
        hv_store_ent
        my_pclose
        my_popen
        sv_gets
        unsharepvn

# BUGS

If you find any bugs, `Devel::PPPort` doesn't seem to build on your system, or any of its tests fail, please file an issue here: https://github.com/mhx/Devel-PPPort/issues/

# AUTHORS

- Version 1.x of Devel::PPPort was written by Kenneth Albanowski.

- Version 2.x was ported to the Perl core by Paul Marquess.

- Version 3.x was ported back to CPAN by Marcus Holland-Moritz.

- Versions >= 3.22 are maintained with support from Matthew Horsfall (alh).

# COPYRIGHT

Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz.

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.

# SEE ALSO

See h2xs, ppport.h.