Devel::PPPort - Perl/Pollution/Portability |
Devel::PPPort - Perl/Pollution/Portability
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');
$ 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
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.
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.
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.
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.
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
behaves like WriteFile
above, but returns the contents
of the would-be file rather than writing it out.
ppport.h supports Perl versions from 5.003 to 5.30 in threaded and non-threaded configurations.
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
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:
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
toFOLD_uvchr toLOWER_uvchr toTITLE_uvchr toUPPER_uvchr
clear_defarray
UVCHR_SKIP
DECLARATION_FOR_LC_NUMERIC_MANIPULATION
PadnameUTF8 is_invariant_string newUNOP_AUX
newDEFSVOP op_convert_list
cv_name newMETHOP newMETHOP_named
cv_set_call_checker_flags grok_infnan isinfnan sync_locale
grok_number_flags op_sibling_splice
isUTF8_CHAR markstack_grow
OP_TYPE_IS_OR_WAS
OP_TYPE_IS
is_safe_syscall uvoffuni_to_utf8_flags
sv_pos_b2u_flags
SVt_INVLIST
re_intuit_start toFOLD toFOLD_utf8 toLOWER_L1 toTITLE
hv_rand_set
av_tindex av_top_index
isALPHANUMERIC isIDCONT
SvREFCNT_dec_NN
READ_XDIGIT
PL_comppad_name PadlistREFCNT newMYSUB newSVpadname
sv_copypv_flags sv_copypv_nomg sv_vcatpvfn_flags
utf8_to_uvchr_buf
is_utf8_char_buf wrap_op_checker
toLOWER_utf8 toTITLE_utf8 toUPPER_utf8 to_utf8_fold to_utf8_lower to_utf8_title to_utf8_upper
newCONSTSUB_flags
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
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
foldEQ_latin1
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
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
PL_rpeepp isOCTAL lex_stuff_pvs
blockhook_register
SvNV_nomg find_rundefsv foldEQ foldEQ_locale foldEQ_utf8 hv_fill sv_dec_nomg sv_inc_nomg
sv_2nv_flags
sv_pos_u2b_flags
prescan_version
PL_keyword_plugin
ck_warner ck_warner_d
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
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
hv_common hv_common_key_len sv_destroyable sys_init sys_init3 sys_term
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
PerlIO_context_layers gv_name_set hv_copy_hints_hv my_vsnprintf sv_does sv_usepvn_flags
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
SvPVbyte_force op_refcnt_lock op_refcnt_unlock savesvpv vnormal
hv_clear_placeholders hv_scalar scan_version sv_2iv_flags sv_2uv_flags
new_version save_set_svflags vcmp vnumify vstringify
SvIsCOW SvIsCOW_shared_hash
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
HeUTF8 nothreadhook
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
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
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
SvGAMAGIC gv_efullname4 gv_fullname4 is_utf8_string save_generic_pvref utf16_to_utf8 utf16_to_utf8_reversed
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
POPpx get_vtbl save_generic_svref
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
CopyD MoveD do_binmode my_bcopy save_aelem save_helem
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
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
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.
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 h2xs, ppport.h.
Devel::PPPort - Perl/Pollution/Portability |