PPPort(3)

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
    call_argv
    call_method
    call_pv
    call_sv
    caller_cx
    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_cvn_flags
    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_fetchsv
    gv_stashpvn
    gv_stashpvs
    GvSVn
    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
    isGV_with_GP
    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
    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_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
    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.21.8
      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
      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_get_backrefs
      sv_setref_pvs

perl 5.21.7
      OpHAS_SIBLING
      OpSIBLING
      OpSIBLING_set
      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_atou
      grok_infnan
      isinfnan
      sync_locale

perl 5.21.2
      grok_number_flags
      op_parent
      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_pvn
      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
      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
      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
      SvRX
      SvRXOK
      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
      toFOLD_uni
      toLOWER_uni
      toTITLE_uni
      toUPPER_uni
      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
      PERL_SYS_INIT3
      PL_check
      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
      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
      save_aelem
      save_helem

perl 5.004
      GIMME_V
      G_VOID
      HePV
      HeSVKEY_set
      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.