Devel::PPPort - Perl/Pollution/Portability


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


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


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.30 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.30 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:

    __ASSERT_
    _aMY_CXT
    _pMY_CXT
    aMY_CXT
    aMY_CXT_
    aTHX
    aTHX_
    aTHXR
    aTHXR_
    av_tindex
    av_top_index
    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
    croak_memory_wrap
    croak_no_modify
    croak_nocontext
    croak_sv
    croak_xs_usage
    dAX
    dAXMARK
    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
    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
    isALNUM
    isALNUM_A
    isALNUMC
    isALNUMC_A
    isALPHA
    isALPHA_A
    isALPHANUMERIC
    isALPHANUMERIC_A
    isASCII
    isASCII_A
    isBLANK
    isBLANK_A
    isCNTRL
    isCNTRL_A
    isDIGIT
    isDIGIT_A
    isGRAPH
    isGRAPH_A
    isIDCONT
    isIDCONT_A
    isIDFIRST
    isIDFIRST_A
    isLOWER
    isLOWER_A
    isOCTAL
    isOCTAL_A
    isPRINT
    isPRINT_A
    isPSXSPC
    isPSXSPC_A
    isPUNCT
    isPUNCT_A
    isSPACE
    isSPACE_A
    isUPPER
    isUPPER_A
    isWORDCHAR
    isWORDCHAR_A
    isXDIGIT
    isXDIGIT_A
    IVdf
    IVSIZE
    IVTYPE
    LIKELY
    load_module
    memEQ
    memEQs
    memNE
    memNEs
    mess
    mess_nocontext
    mess_sv
    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
    my_strnlen
    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_ARGS_ASSERT_CROAK_XS_USAGE
    PERL_BCDVERSION
    Perl_croak_no_modify
    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
    UNICODE_REPLACEMENT
    UNLIKELY
    UTF8_MAXBYTES
    UTF8_SAFE_SKIP
    utf8_to_uvchr
    utf8_to_uvchr_buf
    UVof
    UVSIZE
    UVTYPE
    UVuf
    UVXf
    UVxf
    vload_module
    vmess
    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_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
    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
perl 5.22.0
  UVCHR_SKIP
perl 5.21.10
  DECLARATION_FOR_LC_NUMERIC_MANIPULATION
perl 5.21.7
  PadnameUTF8
  is_invariant_string
  newUNOP_AUX
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
  isUTF8_CHAR
  markstack_grow
perl 5.19.10
  OP_TYPE_IS_OR_WAS
perl 5.19.7
  OP_TYPE_IS
perl 5.19.4
  is_safe_syscall
  uvoffuni_to_utf8_flags
perl 5.19.3
  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
  isALPHANUMERIC
  isIDCONT
perl 5.17.7
  SvREFCNT_dec_NN
perl 5.17.6
  READ_XDIGIT
perl 5.17.4
  PL_comppad_name
  PadlistREFCNT
  newMYSUB
  newSVpadname
perl 5.17.2
  sv_copypv_flags
  sv_copypv_nomg
  sv_vcatpvfn_flags
perl 5.15.9
  utf8_to_uvchr_buf
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_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
  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.13.8
  foldEQ_latin1
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
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
  mg_free_type
  newSVpv_share
  op_append_elem
  op_append_list
  op_contextualize
  op_linklist
  op_prepend_elem
  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
perl 5.13.3
  blockhook_register
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
  sv_2nv_flags
perl 5.11.5
  sv_pos_u2b_flags
perl 5.11.4
  prescan_version
perl 5.11.2
  PL_keyword_plugin
perl 5.11.1
  ck_warner
  ck_warner_d
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
  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
  gv_fetchfile_flags
  mro_get_linear_isa
  mro_method_changed_in
  my_dirfd
  pregcomp
  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
  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
  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
  save_bool
  savestack_grow_cnt
  seed
  sv_cat_decode
  sv_setpviv
  sv_setpviv_mg
  unpackstring
perl 5.8.0
  HeUTF8
  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
  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
perl 5.7.1
  POPpbytex
  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
  utf8n_to_uvchr
  utf8n_to_uvuni
  uvchr_to_utf8
  uvuni_to_utf8
perl 5.6.1
  SvGAMAGIC
  gv_efullname4
  gv_fullname4
  is_utf8_string
  save_generic_pvref
  utf16_to_utf8
  utf16_to_utf8_reversed
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
  magic_dump
  my_atof
  my_fflush_all
  newANONATTRSUB
  newATTRSUB
  newXS
  newXSproto
  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_encode
  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_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 send a bug report to perlbug@perl.org.


AUTHORS


COPYRIGHT

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.


SEE ALSO

See h2xs, ppport.h.

 Devel::PPPort - Perl/Pollution/Portability