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.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
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_fetchmethod_flags
gv_fetchpvn
gv_fetchpvn_flags
gv_fetchpvs
gv_fetchsv
gv_init_pv
gv_init_pvn
gv_init_sv
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
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
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
UTF8_MAXBYTES
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 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
-
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_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
-
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
- 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 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
-
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 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 send a bug report to perlbug@perl.org.
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.
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.