PPPort(3)
Hey bestie! Welcome to PPPort(3) from the User Contributed Perl Documentation π
This is the manual for Devel::PPPort, and it's giving βmake your XS code portable across Perl versionsβ in the cutest way possible. β¨
π 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). iconic evolution behavior π
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_07 to 5.35.9 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. No cap, that's the whole point. β¨
You should attempt to get 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 not 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, test it, and distribute the header along with your module. π«Ά
It is important to use the most recent version of ppport.h. You do need to test before shipping a newer version than you already had. One possible failure is that someone had to convert a backported element from a macro into a function, and actual functions must be enabled with a NEED macro to minimize the possibility of namespace pollution. See HACKERS for details. The developers of Devel::PPPort want to hear if there are other problems that arise from using a later ppport.h. Use <https://github.com/Dual-Life/Devel-PPPort/issues> to report any. π
π 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_07 to 5.35.9 in threaded and non-threaded configurations. Both vibes? Both supported, periodt. β¨
π 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 are not otherwise available in Perl releases older than when the elements were first introduced. (Note that many of these are not supported all the way back to 5.003_07, but it may be that they are supported back as far as you need; see "Supported Perl API, sorted by version" for that information.)
okay so the roster keeps going and honestly? it keeps going. No skips, no "etc." β every single name, in order, so you can point at any one of them and go "oh THAT one" β¨
π the _ / a crew first (yes, they sort that way) π
_aMY_CXTaMY_CXTaMY_CXT___ASSERT_ASSUMEaTHXaTHX_aTHXRaTHXR_av_countAvFILLpav_tindexav_top_index
notice how _aMY_CXT shows up before aMY_CXT with a whole extra underscore at the front? that's not a typo, that's just sort order being sort order π
and aMY_CXT_ has one hanging off the end. three of them. all real. all different.
πΈ B through C β the c's are unexplainably huge πΈ
BOM_UTF8boolSVcall_argvcaller_cxcall_methodcall_pvcall_svC_ARRAY_ENDC_ARRAY_LENGTHcBOOLckWARNckWARN2ckWARN2_dckWARN3ckWARN3_dckWARN4ckWARN4_dckWARN_dck_warnerck_warner_dCopFILECopFILEAVCopFILEGVCopFILEGV_setCopFILE_setCopFILESVCopSTASHCopSTASH_eqCopSTASHPVCopSTASHPV_setCopSTASH_setCopyDCPERLscopecroak_memory_wrapcroak_nocontextcroak_no_modifycroak_svcroak_xs_usage
the way ckWARN has like seven cousins and every single one of them matters, _d suffix included π do not assume ckWARN_d and ckWARN2_d are "basically the same thing", they are literally separate names in this list and they stay that way.
π¦ d + E β the d-prefix girls are having a moment π¦
dAXdAXMARKDECLARATION_FOR_LC_NUMERIC_MANIPULATIONDEFSVDEFSV_setdie_svdITEMSdMY_CXTdMY_CXT_SVdNOOPdTHRdTHXdTHXadTHXoadTHXRdUNDERBARdVARdXCPTdXSTARGEND_EXTERN_CERRSVeval_pveval_svEXTERN_C
DECLARATION_FOR_LC_NUMERIC_MANIPULATION is lowkey the main character of this section purely for being that long, and I respect it immensely. also hi dTHXa, dTHXoa, dTHXR β the family reunion is adorable π«Ά
π§ f + g β short section, big personality π§
foldEQ_utf8get_avget_cvget_cvn_flagsget_cvsget_hvget_svG_METHODG_RETHROWgrok_bingrok_hexgrok_numberGROK_NUMERIC_RADIXgrok_numeric_radixgrok_octgv_fetchpvn_flagsgv_fetchpvsgv_fetchsvgv_init_pvngv_stashpvngv_stashpvsGvSVn
okay <hotpink>GROK_NUMERIC_RADIX</hotpink> (all caps) and <hotpink>grok_numeric_radix</hotpink> (all lowercase) are right next to each other and they are two separate entries, bestie. do not merge them in your head. I'm begging π
π H + I β brief but iconic π
HEf_SVKEYHeUTF8hv_fetchsHvNAME_getHvNAMELEN_gethv_storesIN_LOCALEIN_LOCALE_COMPILETIMEIN_LOCALE_RUNTIMEIN_PERL_COMPILETIMEINT2PTR
three IN_LOCALE variants, zero chill, all spelled exactly like that π
β the isβ¦ multiverse, part one: isALNUM β isLOWER_uvchr β
this is where the list goes full superhero-squad on us. same base name, seventeen suffixes. every one of them real:
isALNUMisALNUM_AisALNUMCisALNUMC_AisALNUMC_L1isALPHAisALPHA_AisALPHA_L1isALPHA_LC_utf8_safeisALPHANUMERICisALPHANUMERIC_AisALPHANUMERIC_L1isALPHANUMERIC_LCisALPHANUMERIC_LC_utf8_safeisALPHANUMERIC_utf8_safeisALPHANUMERIC_uvchrisALPHA_utf8_safeisALPHA_uvchrisASCIIisASCII_AisASCII_L1isASCII_LCisASCII_utf8_safeisASCII_uvchrisBLANKisBLANK_AisBLANK_L1isBLANK_LCisBLANK_LC_utf8_safeisBLANK_utf8_safeisBLANK_uvchrisCNTRLisCNTRL_AisCNTRL_L1isCNTRL_LC_utf8_safeisCNTRL_utf8_safeisCNTRL_uvchrisDIGITisDIGIT_AisDIGIT_L1isDIGIT_LC_utf8_safeisDIGIT_utf8_safeisDIGIT_uvchrisGRAPHisGRAPH_AisGRAPH_L1isGRAPH_LC_utf8_safeisGRAPH_utf8_safeisGRAPH_uvchrisGV_with_GPisIDCONTisIDCONT_AisIDCONT_L1isIDCONT_LCisIDCONT_LC_utf8_safeisIDCONT_utf8_safeisIDCONT_uvchrisIDFIRSTisIDFIRST_AisIDFIRST_L1isIDFIRST_LCisIDFIRST_LC_utf8_safeisIDFIRST_utf8_safeisIDFIRST_uvchris_invariant_stringisLOWERisLOWER_AisLOWER_L1isLOWER_LC_utf8_safeisLOWER_utf8_safeisLOWER_uvchr
π notice isIDFIRST has an isIDCONT sibling and both have their little _A, _L1, _LC, _LC_utf8_safe, _utf8_safe, _uvchr outfits. also is_invariant_string slid in there lowercase-styled like it's not part of the is-alphabet mafia. respect the lowercase ones too, they're doing their best π«Ά
π₯ the isβ¦ multiverse, part two: IS_NUMBER_β¦ β isXDIGIT π₯
and it continues. drink some water, bestie:
IS_NUMBER_GREATER_THAN_UV_MAXIS_NUMBER_INFINITYIS_NUMBER_IN_UVIS_NUMBER_NANIS_NUMBER_NEGIS_NUMBER_NOT_INTisOCTALisOCTAL_AisOCTAL_L1isPRINTisPRINT_AisPRINT_L1isPRINT_LC_utf8_safeisPRINT_utf8_safeisPRINT_uvchrisPSXSPCisPSXSPC_AisPSXSPC_L1isPSXSPC_LC_utf8_safeisPSXSPC_utf8_safeisPSXSPC_uvchrisPUNCTisPUNCT_AisPUNCT_L1isPUNCT_LC_utf8_safeisPUNCT_utf8_safeisPUNCT_uvchrisSPACEisSPACE_AisSPACE_L1isSPACE_LC_utf8_safeisSPACE_utf8_safeisSPACE_uvchrisUPPERisUPPER_AisUPPER_L1isUPPER_LC_utf8_safeisUPPER_utf8_safeisUPPER_uvchrisUTF8_CHARis_utf8_invariant_stringisWORDCHARisWORDCHAR_AisWORDCHAR_L1isWORDCHAR_LCisWORDCHAR_LC_utf8_safeisWORDCHAR_utf8_safeisWORDCHAR_uvchrisXDIGITisXDIGIT_AisXDIGIT_L1isXDIGIT_LCisXDIGIT_LC_utf8_safeisXDIGIT_utf8_safeisXDIGIT_uvchr
quick vibe check: IS_NUMBER_β¦ is ALL CAPS with an IS_ prefix, isβ¦ is lowercase-ish with an is prefix, and is_utf8_invariant_string / is_invariant_string are the underscore-y twins. three totally different spelling families, all sitting in the same alphabetical neighbourhood π also isPSXSPC is real, it is not a typo of isSPACE, and I need you to internalise that π
π IV, L, and the entire M section π
IVdfIVSIZEIVTYPELATIN1_TO_NATIVELC_NUMERIC_LOCKLC_NUMERIC_UNLOCKLIKELYload_moduleLOCK_LC_NUMERIC_STANDARDLOCK_NUMERIC_STANDARDmemCHRsmemEQmemEQsmemNEmemNEsmessmess_nocontextmess_svmg_findextMoveDmPUSHimPUSHnmPUSHpmPUSHsmPUSHuMUTABLE_AVMUTABLE_CVMUTABLE_GVMUTABLE_HVMUTABLE_IOMUTABLE_PTRMUTABLE_SVmXPUSHimXPUSHnmXPUSHpmXPUSHsmXPUSHuMY_CXTMY_CXT_CLONEMY_CXT_INITmy_snprintfmy_sprintfmy_strlcatmy_strlcpymy_strnlen
the seven MUTABLE_ ones are a full set β AV, CV, GV, HV, IO, PTR, SV β and the mPUSH*/mXPUSH* squads mirror each other exactly, i n p s u in the same order both times. it's giving choreography π
memEQ vs memEQs vs memNE vs memNEs β yes, one letter of difference, yes, four distinct entries, and no, you cannot skip the s ones. my_ lowercase squad at the end is a completely different vibe from MY_CXT all-caps, don't get it twisted π
π N, O, packWARN, and the PERL_ era begins π
NATIVE_TO_LATIN1NATIVE_TO_UNInewCONSTSUBnewRV_incnewRV_noincnewSVpvnnewSVpvn_flagsnewSVpvn_sharenewSVpvn_utf8newSVpvsnewSVpvs_flagsnewSVpvs_sharenewSVsv_flagsnewSVsv_nomgnewSV_typenewSVuvNewxNewxcNewxzNOOPNOT_REACHEDNUM2PTRNVefNVffNVgfNVTYPEOpHAS_SIBLINGOpLASTSIB_setOpMAYBESIB_setOpMORESIB_setOpSIBLINGpackWARNpackWARN2packWARN3packWARN4
Newx, Newxc, Newxz β capital N, tiny x, and then the extra letter. meanwhile NOOP and NOT_REACHED are screaming in caps. and newSV_type has a lowercase s AND a lowercase v but an underscore, while newSVpvn doesn't have the underscore. this is not chaos, it's art πΌοΈ
π PERL_ everything: the not-magic batch π
PERL_ABSPERL_ARGS_ASSERT_CROAK_XS_USAGEPerl_ck_warnerPerl_ck_warner_dPerl_croak_no_modifyPERL_HASHPERL_INT_MAXPERL_INT_MINPERLIO_FUNCS_CASTPERLIO_FUNCS_DECLPERL_LONG_MAXPERL_LONG_MIN
sneaky little detail: PERL_ARGS_ASSERT_CROAK_XS_USAGE is firmly in the PERL_ all-caps club, but Perl_ck_warner, Perl_ck_warner_d and Perl_croak_no_modify are Perl_ β lowercase erl. different prefix, different name, same neighbourhood. PERLIO_FUNCS_CAST and PERLIO_FUNCS_DECL are also not PERL_IO_β¦, they're PERLIO_β¦. iykyk π«Ά
π the PERL_MAGIC_ wall of fame π
thirty-nine of them. thirty-nine!! and every single one gets its own line because they are all separate names:
PERL_MAGIC_arylenPERL_MAGIC_backrefPERL_MAGIC_bmPERL_MAGIC_collxfrmPERL_MAGIC_dbfilePERL_MAGIC_dblinePERL_MAGIC_defelemPERL_MAGIC_envPERL_MAGIC_envelemPERL_MAGIC_extPERL_MAGIC_fmPERL_MAGIC_globPERL_MAGIC_isaPERL_MAGIC_isaelemPERL_MAGIC_mutexPERL_MAGIC_nkeysPERL_MAGIC_overloadPERL_MAGIC_overload_elemPERL_MAGIC_overload_tablePERL_MAGIC_posPERL_MAGIC_qrPERL_MAGIC_regdataPERL_MAGIC_regdatumPERL_MAGIC_regex_globalPERL_MAGIC_sharedPERL_MAGIC_shared_scalarPERL_MAGIC_sigPERL_MAGIC_sigelemPERL_MAGIC_substrPERL_MAGIC_svPERL_MAGIC_taintPERL_MAGIC_tiedPERL_MAGIC_tiedelemPERL_MAGIC_tiedscalarPERL_MAGIC_utf8PERL_MAGIC_uvarPERL_MAGIC_uvar_elemPERL_MAGIC_vecPERL_MAGIC_vstring
see the pattern? env/envelem, isa/isaelem, sig/sigelem, tied/tiedelem, uvar/uvar_elem, regdata/regdatum, overload/overload_elem/overload_table. the base one and the elem one are different things and both are listed. PERL_MAGIC_shared and PERL_MAGIC_shared_scalar likewise. no shortcuts π
π¦ PERL_PV_β¦, QUAD, SCAN, SHORT, and the entire U to VERSION runway π¦
PERL_PV_ESCAPE_ALLPERL_PV_ESCAPE_FIRSTCHARPERL_PV_ESCAPE_NOBACKSLASHPERL_PV_ESCAPE_NOCLEARPERL_PV_ESCAPE_QUOTEPERL_PV_ESCAPE_REPERL_PV_ESCAPE_UNIPERL_PV_ESCAPE_UNI_DETECTPERL_PV_PRETTY_DUMPPERL_PV_PRETTY_ELLIPSESPERL_PV_PRETTY_LTGTPERL_PV_PRETTY_NOCLEARPERL_PV_PRETTY_QUOTEPERL_PV_PRETTY_REGPROPPERL_QUAD_MAXPERL_QUAD_MINPERL_SCAN_ALLOW_UNDERSCORESPERL_SCAN_DISALLOW_PREFIXPERL_SCAN_GREATER_THAN_UV_MAXPERL_SCAN_SILENT_ILLDIGITPERL_SHORT_MAXPERL_SHORT_MINPERL_SIGNALS_UNSAFE_FLAGPERL_STATIC_INLINEPERL_UCHAR_MAXPERL_UCHAR_MINPERL_UINT_MAXPERL_UINT_MINPERL_ULONG_MAXPERL_ULONG_MINPERL_UNUSED_ARGPERL_UNUSED_CONTEXTPERL_UNUSED_DECLPERL_UNUSED_RESULTPERL_UNUSED_VARPERL_UQUAD_MAXPERL_UQUAD_MINPERL_USE_GCC_BRACE_GROUPSPERL_USHORT_MAXPERL_USHORT_MINPERL_VERSION_EQPERL_VERSION_GEPERL_VERSION_GTPERL_VERSION_LEPERL_VERSION_LTPERL_VERSION_NEPerl_warnerPerl_warner_nocontext
the PERL_PV_β¦ section splits into two clean little families β eight PERL_PV_ESCAPE_* and six PERL_PV_PRETTY_* β and I'm obsessed with how tidy that is πΈ meanwhile the min/max pairs (QUAD, SHORT, UCHAR, UINT, ULONG, UQUAD, USHORT) all come as a matched _MAX/_MIN set, except PERL_UQUAD_MAX/PERL_UQUAD_MIN, which are present, obviously, I'm just saying. and yeah β PERL_VERSION_EQ through PERL_VERSION_NE, all six comparison flavours, ending on Perl_warner and Perl_warner_nocontext, which drop back to lowercase erl again π
π the PL_ section: 49 of them, we're doing this π
these are the PL_ girls and they come in flavours: all-lowercase tails, PL_sv_β¦, PL_DBβ¦, and the caps-break ones like PL_Sv and PL_Xpv which are definitely on purpose:
PL_bufendPL_bufptrPL_compilingPL_coplinePL_curcopPL_curstashPL_DBsignalPL_DBsinglePL_DBsubPL_DBtracePL_debstashPL_defgvPL_diehookPL_dirtyPL_dowarnPL_errgvPL_error_countPL_expectPL_hexdigitPL_hintsPL_in_myPL_in_my_stashPL_laststatvalPL_lex_statePL_lex_stuffPL_linestrPL_mess_svPL_naPL_no_modifyPL_parserPL_perldbPL_perl_destruct_levelPL_ppaddrPL_rsfpPL_rsfp_filtersPL_signalsPL_stack_basePL_stack_spPL_statcachePL_stdingvPL_SvPL_sv_arenarootPL_sv_noPL_sv_undefPL_sv_yesPL_taintedPL_taintingPL_tokenbufPL_Xpv
count them if you want, there's 49, and yes PL_Sv (capital S) is a different entry from PL_sv_arenaroot, PL_sv_no, PL_sv_undef and PL_sv_yes (lowercase s). same for PL_Xpv and its capital X. Case matters literally everywhere here, this whole page is a case-sensitivity lecture disguised as a list π
π§ p-lowercase, Poison, PTR, PUSH, pv_ β the tricky-lookalike zone π§
okay this cluster is the one that will get you if you're skimming, because it has _pMY_CXT (leading underscore), pMY_CXT (no leading underscore), and pMY_CXT_ (trailing underscore). three different names. all present. all staying:
_pMY_CXTpMY_CXTpMY_CXT_PoisonPoisonFreePoisonNewPoisonWithpTHXpTHX_PTR2IVPTR2natPTR2NVPTR2ulPTR2UVPTRVPUSHmortalPUSHupv_displaypv_escapepv_pretty
the four Poison* ones β Poison, PoisonFree, PoisonNew, PoisonWith β are a little quartet, and then PTR2IV, PTR2nat, PTR2NV, PTR2ul, PTR2UV are five, and notice PTR2nat is the only one of the five with a lowercase tail. also pTHX vs pTHX_ β with and without the trailing underscore, two entries, always π
π and the home stretch of this batch: R, S, start_, STMT_, STORE_, STR_, sv_ π
REPLACEMENT_CHARACTER_UTF8RESTORE_LC_NUMERICSAVE_DEFSVSTART_EXTERN_CSTART_MY_CXTstart_subparseSTMT_ENDSTMT_STARTSTORE_LC_NUMERIC_SET_STANDARDSTORE_NUMERIC_SET_STANDARDSTR_WITH_LENsv_2pvbytesv_2pvbyte_nolensv_2pv_flagssv_2pv_nolen
look at START_EXTERN_C and START_MY_CXT β big loud START_ β versus start_subparse just chilling in lowercase like nothing's happening π and STORE_LC_NUMERIC_SET_STANDARD next to STORE_NUMERIC_SET_STANDARD, one with the LC_ bit and one without, both real, both here. and the four sv_2pvβ¦ ones: sv_2pvbyte, sv_2pvbyte_nolen, sv_2pv_flags, sv_2pv_nolen. yes, nolen shows up twice with different middle bits. no, you can't just write one and call it a day β¨
and that's this stretch of the list β not the end though, we're nowhere near the end, there's more coming, so hydrate and keep scrolling bestie π π₯
β¦and we're still going, bestie β the alphabet is long but so is our love for it π here's the rest of the list, zero skips, zero cap:
sv_2uvsv_catpvf_mgsv_catpvf_mg_nocontextsv_catpv_mgsv_catpvn_mgsv_catpvn_nomgsv_catpvssv_catsv_mgsv_catsv_nomgSV_CONST_RETURNSV_COW_DROP_PVSV_COW_SHARED_HASH_KEYSSVfSVfARGSVf_UTF8SvGETMAGICSV_GMAGICSV_HAS_TRAILING_NULSV_IMMEDIATE_UNREFSvIV_nomgsv_len_utf8sv_len_utf8_nomgsv_magic_portableSvMAGIC_setsv_mortalcopy_flagsSV_MUTABLE_RETURNSV_NOSTEALSvNV_nomgSvPVbyteSvPVCLEARSvPV_constSvPV_flagsSvPV_flags_constSvPV_flags_const_nolenSvPV_flags_mutableSvPV_forceSvPV_force_flagsSvPV_force_flags_mutableSvPV_force_flags_nolenSvPV_force_mutableSvPV_force_nolenSvPV_force_nomgSvPV_force_nomg_nolenSvPV_mutablesv_pvn_force_flagssv_pvn_nomgSvPV_nolenSvPV_nolen_constSvPV_nomgSvPV_nomg_constSvPV_nomg_const_nolenSvPV_nomg_nolenSvPV_renewSvPVX_constSvPVX_mutableSvPVx_nolen_constSvREFCNT_incSvREFCNT_inc_NNSvREFCNT_inc_simpleSvREFCNT_inc_simple_NNSvREFCNT_inc_simple_voidSvREFCNT_inc_simple_void_NNSvREFCNT_inc_voidSvREFCNT_inc_void_NNSvRV_setSvRXSvRXOKsv_setiv_mgsv_setnv_mgsv_setpvf_mgsv_setpvf_mg_nocontextsv_setpv_mgsv_setpvn_mgsv_setpvssv_setsv_flagssv_setsv_mgsv_setsv_nomgsv_setuvsv_setuv_mgSvSHARED_HASHSV_SMAGICSvSTASH_setSvTRUE_nomgsv_unmagicextSvUOKsv_usepvn_mgSvUTF8SV_UTF8_NO_ENCODINGsv_uvSvUVSvUV_nomgSvUV_setSvUVXSvUVxSvUVXxsv_vcatpvfsv_vcatpvf_mgsv_vsetpvfsv_vsetpvf_mgSvVSTRING_mgswitch_to_global_localesync_localetoFOLD_utf8_safetoFOLD_uvchrtoLOWER_utf8_safetoLOWER_uvchrtoTITLE_utf8_safetoTITLE_uvchrtoUPPER_utf8_safetoUPPER_uvchrUNDERBARUNICODE_REPLACEMENTUNI_TO_NATIVEUNLIKELYUNLOCK_LC_NUMERIC_STANDARDUNLOCK_NUMERIC_STANDARDUTF8_CHK_SKIPUTF8fUTF8fARGUTF8_IS_INVARIANTUTF8_MAXBYTESUTF8_MAXBYTES_CASEUTF8_SAFE_SKIPUTF8_SKIPutf8_to_uvchrutf8_to_uvchr_bufUVCHR_IS_INVARIANTUVCHR_SKIPUVofUVSIZEUVTYPEUVufUVXfUVxfvload_modulevmessvnewSVpvfvwarnerWARN_ALLWARN_AMBIGUOUSWARN_ASSERTIONSWARN_BAREWORDWARN_CLOSEDWARN_CLOSUREWARN_DEBUGGINGWARN_DEPRECATEDWARN_DIGITwarnerWARN_EXECWARN_EXITINGWARN_GLOBWARN_INPLACEWARN_INTERNALWARN_IOWARN_LAYERWARN_MALLOCWARN_MISCWARN_NEWLINEwarn_nocontextWARN_NUMERICWARN_ONCEWARN_OVERFLOWWARN_PACKWARN_PARENTHESISWARN_PIPEWARN_PORTABLEWARN_PRECEDENCEWARN_PRINTFWARN_PROTOTYPEWARN_QWWARN_RECURSIONWARN_REDEFINEWARN_REGEXPWARN_RESERVEDWARN_SEMICOLONWARN_SEVEREWARN_SIGNALWARN_SUBSTRwarn_svWARN_SYNTAXWARN_TAINTWARN_THREADSWARN_UNINITIALIZEDWARN_UNOPENEDWARN_UNPACKWARN_UNTIEWARN_UTF8WARN_VOIDWIDEST_UTYPEXCPT_CATCHXCPT_RETHROWXCPT_TRY_ENDXCPT_TRY_STARTXPUSHmortalXPUSHuXSprePUSHXSPROTOXSRETURNXSRETURN_UVXST_mUVZeroD
π Supported Perl API, sorted by version π
Okay so this next table is the same tea but organized a whole different way, and honestly it's kind of iconic. It lists every single Perl API element that's available, sorted by the version where support starts. That means it covers literally everything ppport.h helps you out with plus all the stuff it doesn't. No gatekeeping π
Sometimes it just doesn't make practical sense to support an element earlier than it already is β like, be so for real, UTF-8 functionality isn't provided before the release where it first showed up. Can't backport the concept of UTF-8 to a world that hasn't invented it yet, y'know? π¦
But in other cases it's simply that nobody has implemented support yet. Patches welcome, fr fr! Some elements are ported backward for some releases, but not all the way back to 5.003_07. We love a partial glow-up.
If an element β call it ELEMENT β isn't on this list, run this little detective move to find out why:
perl ppport.h --api-info=ELEMENT
A few entries below are marked as DEPRECATED. Do not use these in new code, periodt β and if you've got existing uses, you should be converting them to something better.
Some entries are marked "experimental". That means like⦠don't, generally. They may be removed or changed without notice. Curious why something's experimental? You can ask by sending email to perl5-porters@perl.org.
And some entries are marked "undocumented" β meaning they aren't necessarily considered stable and could be changed or removed in some future release with no warning. So using them without further checking is a genuinely bad idea πΈ It could be they're meant for perl core use only; or it could be that Devel::PPPort doesn't know where to find their documentation; or it's just an oversight that they haven't been documented. If you want to use one and potentially have it backported, first send mail to perl5-porters@perl.org.
π real talk: DEPRECATED = don't start new stuff with it. experimental = may vanish or mutate without notice. undocumented = not necessarily stable, could change or get removed with no warning. Respect the labels, bestie.
perl 5.35.9
NV_ZERO_IS_ALLBITS_ZEROPERL_INC_VERSION_LISTsv_numeqsv_numeq_flagssv_streqsv_streq_flagsUSE_C_BACKTRACEWARN_EXPERIMENTAL__ARGS_ARRAY_WITH_SIGNATURESWARN_EXPERIMENTAL__BUILTIN
perl 5.35.8
op_wrap_finally(marked experimental)
perl 5.35.7
phase_name
perl 5.35.6
CopFILEAVnsv_setpvn_fresh
perl 5.35.5
SAVESTRLENWARN_EXPERIMENTAL__FOR_LIST
perl 5.35.4
newDEFEROP(marked experimental)PERL_THREAD_LOCALST_DEV_SIGNST_DEV_SIZESvIsBOOLsv_setboolsv_setbool_mgsv_setrv_incsv_setrv_inc_mgsv_setrv_noincsv_setrv_noinc_mgWARN_EXPERIMENTAL__DEFER
perl 5.35.1
av_new_allocHAS_FFSHAS_FFSLHAS_NL_LANGINFO_LHAS_NON_INT_BITFIELDSHAS_STRXFRM_LnewAV_alloc_xnewAV_alloc_xz
perl 5.33.8
cophh_exists_pv(marked experimental)cophh_exists_pvn(marked experimental)cophh_exists_pvs(marked experimental)cophh_exists_sv(marked experimental)cop_hints_exists_pvcop_hints_exists_pvncop_hints_exists_pvscop_hints_exists_sv
perl 5.33.7
newTRYCATCHOP(marked experimental)WARN_EXPERIMENTAL__TRY
perl 5.33.5
GETENV_PRESERVES_OTHER_THREADpad_compname_type(DEPRECATED)
perl 5.33.2
pack_cat(DEPRECATED)
perl 5.32.1
GDBMNDBM_H_USES_PROTOTYPESHAS_DBMINIT_PROTOHAS_SOCKADDR_STORAGEI_DBMI_NDBMNDBM_H_USES_PROTOTYPES
perl 5.31.9
UNI_DISPLAY_BACKSPACE
perl 5.31.7
HASATTRIBUTE_ALWAYS_INLINEHAS_ISLESSHAS_WCRTOMBsv_isa_sv(marked experimental)WARN_EXPERIMENTAL__ISA
perl 5.31.5
isALPHANUMERIC_utf8isALPHA_utf8isASCII_utf8isBLANK_utf8isCNTRL_utf8isDIGIT_utf8isGRAPH_utf8isIDCONT_utf8isIDFIRST_utf8isLOWER_utf8isPRINT_utf8isPSXSPC_utf8isPUNCT_utf8isSPACE_utf8isUPPER_utf8isWORDCHAR_utf8isXDIGIT_utf8toFOLD_utf8toLOWER_utf8toTITLE_utf8toUPPER_utf8
perl 5.31.4
cop_fetch_label(marked experimental)cop_store_label(marked experimental)sv_2pvbyte_flags(undocumented)sv_2pvutf8_flags(undocumented)sv_nolocking(DEPRECATED)SvPVbyte_nomgSvPVbyte_or_nullSvPVbyte_or_null_nomgSvPVutf8_nomgSvPVutf8_or_nullSvPVutf8_or_null_nomgsv_utf8_downgrade_flagssv_utf8_downgrade_nomg
perl 5.31.3
parse_subsignature(marked experimental)SANE_ERRSVSTORE_LC_NUMERIC_SET_TO_NEEDED_INWITH_LC_NUMERIC_SET_TO_NEEDEDWITH_LC_NUMERIC_SET_TO_NEEDED_IN
perl 5.29.10
my_strtodStrtod
perl 5.29.9
HAS_TOWLOWERHAS_TOWUPPERI_WCTYPEWARN_EXPERIMENTAL__PRIVATE_USEWARN_EXPERIMENTAL__UNIPROP_WILDCARDSWARN_EXPERIMENTAL__VLB
perl 5.27.11
HAS_DUPLOCALEHAS_STRTOD_L
perl 5.27.9
PERL_MAGIC_nonelemthread_locale_init(marked experimental) (undocumented)thread_locale_term(marked experimental) (undocumented)utf8n_to_uvchr_msgsuvchr_to_utf8_flags_msgsWARN_EXPERIMENTAL__ALPHA_ASSERTIONS
perl 5.27.8
HAS_ACCEPT4HAS_DUP3HAS_MKOSTEMPHAS_PIPE2newWHENOPWARN_EXPERIMENTAL__SCRIPT_RUN
perl 5.27.7
WARN_SHADOW
perl 5.27.6
HAS_MBRLENHAS_MBRTOWCHAS_NANOSLEEPHAS_STRNLENHAS_STRTOLD_LHAS_THREAD_SAFE_NL_LANGINFO_LI_WCHARwrap_keyword_plugin(marked experimental)
perl 5.27.5
HAS_MEMRCHR
perl 5.27.4
HAS_FCHMODATHAS_LINKATHAS_OPENATHAS_RENAMEATHAS_UNLINKATmg_freeextPerl_langinfosv_rvunweaken
okay so this is the receipts list β every perl version and every shiny new toy it brought with it, in order, no skips β¨ scroll at your own pace bestie, we're going all the way back π
perl 5.27.3
cv_get_call_checker_flagsPL_sv_zerosv_string_from_errnum
perl 5.27.2
Perl_setlocaleUNICODE_DISALLOW_PERL_EXTENDEDUNICODE_WARN_PERL_EXTENDEDUTF8_DISALLOW_PERL_EXTENDEDUTF8_GOT_PERL_EXTENDEDUTF8_WARN_PERL_EXTENDED
perl 5.27.1
is_utf8_invariant_string_loc
perl 5.25.11
DEFAULT_INC_EXCLUDES_DOT
perl 5.25.10
op_class
perl 5.25.9
isASCII_LC_utf8_safe
perl 5.25.8
sv_set_undef
perl 5.25.7
CLEAR_ERRSVDOUBLE_HAS_NEGATIVE_ZERODOUBLE_HAS_SUBNORMALSDOUBLE_STYLE_IEEELONG_DOUBLE_STYLE_IEEELONG_DOUBLE_STYLE_IEEE_EXTENDEDutf8_hop_backutf8_hop_forwardutf8_hop_safe
perl 5.25.6
this one is a whole buffet, bestie β floating point lore and a full UTF-8 flag collection π
DOUBLE_IS_CRAY_SINGLE_64_BITDOUBLE_IS_IBM_DOUBLE_64_BITDOUBLE_IS_IBM_SINGLE_32_BITis_c9strict_utf8_stringis_c9strict_utf8_string_locis_c9strict_utf8_string_loclenis_strict_utf8_stringis_strict_utf8_string_locis_strict_utf8_string_loclenis_utf8_fixed_width_buf_flagsis_utf8_fixed_width_buf_loc_flagsis_utf8_fixed_width_buf_loclen_flagsis_utf8_string_flagsis_utf8_string_loc_flagsis_utf8_string_loclen_flagsSvPVCLEARsv_setpv_bufsizeUTF8_GOT_CONTINUATIONUTF8_GOT_EMPTYUTF8_GOT_LONGUTF8_GOT_NONCHARUTF8_GOT_NON_CONTINUATIONUTF8_GOT_OVERFLOWUTF8_GOT_SHORTUTF8_GOT_SUPERUTF8_GOT_SURROGATEutf8n_to_uvchr_error
perl 5.25.5
isC9_STRICT_UTF8_CHARisSTRICT_UTF8_CHARisUTF8_CHAR_flagsis_utf8_valid_partial_charis_utf8_valid_partial_char_flagsUNICODE_DISALLOW_ILLEGAL_C9_INTERCHANGEUNICODE_WARN_ILLEGAL_C9_INTERCHANGEUTF8_DISALLOW_ILLEGAL_C9_INTERCHANGEUTF8_WARN_ILLEGAL_C9_INTERCHANGE
perl 5.25.4
HAS_GAI_STRERRORI_XLOCALELONG_DOUBLE_IS_VAX_H_FLOAT
perl 5.25.3
DOUBLE_HAS_INFDOUBLE_HAS_NANDOUBLE_IS_VAX_D_FLOATDOUBLE_IS_VAX_F_FLOATDOUBLE_IS_VAX_G_FLOAThv_bucket_ratio(marked experimental)WARN_EXPERIMENTAL__DECLARED_REFS
perl 5.25.2
HAS_STRERROR_L
perl 5.25.1
op_parent
perl 5.24.0
HAS_MEMMEM
perl 5.23.9
HAS_FREELOCALEHAS_NEWLOCALEHAS_USELOCALE
perl 5.23.8
spot the ones with a little asterisk of chaos, bestie π
clear_defarray(undocumented)HAS_SIGINFO_SI_ADDRHAS_SIGINFO_SI_BANDHAS_SIGINFO_SI_ERRNOHAS_SIGINFO_SI_PIDHAS_SIGINFO_SI_STATUSHAS_SIGINFO_SI_UIDHAS_SIGINFO_SI_VALUEleave_adjust_stacks(marked experimental) (undocumented)Perl_savetmps(undocumented)
perl 5.23.6
LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_BELONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_LELONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_BELONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_LEUNICODE_DISALLOW_ABOVE_31_BITUNICODE_WARN_ABOVE_31_BIT
perl 5.23.5
filesystem-vibes era fr fr π§
HAS_FSTATFSHAS_FSTATVFSHAS_GETMNTENTHAS_HASMNTOPTHAS_STRUCT_STATFSHAS_STRUCT_STATFS_F_FLAGSHAS_USTATI_MNTENTI_SYS_MOUNTI_SYS_STATFSI_SYS_STATVFSI_SYS_VFSI_USTATsv_ref
perl 5.23.2
INT64_CUINT64_CUTF8_IS_NONCHARUTF8_IS_SUPERUTF8_IS_SURROGATE
perl 5.23.0
DOUBLEINFBYTESDOUBLEMANTBITSDOUBLENANBYTESLONGDBLINFBYTESLONGDBLMANTBITSLONGDBLNANBYTESNVMANTBITS
perl 5.21.10
DECLARATION_FOR_LC_NUMERIC_MANIPULATIONRESTORE_LC_NUMERICSTORE_LC_NUMERIC_FORCE_TO_UNDERLYINGSTORE_LC_NUMERIC_SET_TO_NEEDED
perl 5.21.9
HAS_LLRINTLHAS_LLROUNDLHAS_LRINTLHAS_LROUNDLWARN_EXPERIMENTAL__BITWISE
perl 5.21.8
sv_get_backrefs(marked experimental)WARN_EXPERIMENTAL__CONST_ATTRWARN_EXPERIMENTAL__RE_STRICT
perl 5.21.7
HAS_REGCOMPHAS_STATI_GDBMI_GDBMNDBMnewPADNAMELIST(marked experimental)newPADNAMEouter(marked experimental)newPADNAMEpvn(marked experimental)newUNOP_AUXpadnamelist_fetch(marked experimental)PadnamelistREFCNT(marked experimental)PadnamelistREFCNT_dec(marked experimental)padnamelist_store(marked experimental)PadnameREFCNT(marked experimental)PadnameREFCNT_dec(marked experimental)PADNAMEt_OUTER
perl 5.21.6
the math girlies ATE this release, no cap π₯ and the endian flags came through too
block_endblock_startDOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIANDOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIANDOUBLE_IS_IEEE_754_32_BIT_BIG_ENDIANDOUBLE_IS_IEEE_754_32_BIT_LITTLE_ENDIANDOUBLE_IS_IEEE_754_64_BIT_BIG_ENDIANDOUBLE_IS_IEEE_754_64_BIT_LITTLE_ENDIANDOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_BE_LEDOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_LE_BEDOUBLE_IS_UNKNOWN_FORMATDOUBLEKINDHAS_ASINHHAS_ATANHHAS_CBRTHAS_COPYSIGNHAS_ERFHAS_ERFCHAS_EXP2HAS_EXPM1HAS_FDIMHAS_FMAHAS_FMAXHAS_FMINHAS_HYPOTHAS_ILOGBHAS_ISNORMALHAS_LGAMMAHAS_LGAMMA_RHAS_LLRINTHAS_LLROUNDHAS_LOG1PHAS_LOG2HAS_LOGBHAS_LRINTHAS_LROUNDHAS_NANHAS_NEARBYINTHAS_NEXTAFTERHAS_NEXTTOWARDHAS_REMAINDERHAS_REMQUOHAS_RINTHAS_ROUNDHAS_SCALBNHAS_TGAMMAHAS_TRUNCintro_mynewDEFSVOPop_convert_listWARN_LOCALE
perl 5.21.5
cv_nameCV_NAME_NOTQUALHAS_LC_MONETARY_2008newMETHOPnewMETHOP_namedPERL_MAGIC_debugvarPERL_MAGIC_lvrefSV_CATBYTESSV_CATUTF8WARN_EXPERIMENTAL__REFALIASING
perl 5.21.4
CALL_CHECKER_REQUIRE_GVcv_set_call_checker_flagsgrok_infnanHAS_ACOSHHAS_FEGETROUNDHAS_FPCLASSIFYHAS_ISFINITEHAS_ISINFLHAS_J0HAS_J0LHAS_TRUNCLI_FENVisinfnanI_STDINTPerl_acosPerl_asinPerl_atanPerl_coshPerl_log10Perl_sinhPerl_tanPerl_tanh
perl 5.21.3
HAS_LDEXPLLONG_DOUBLE_IS_DOUBLELONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BIG_ENDIANLONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LITTLE_ENDIANLONG_DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIANLONG_DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIANLONG_DOUBLE_IS_UNKNOWN_FORMATLONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIANLONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIANLONG_DOUBLEKINDPerl_ldexp
perl 5.21.2
grok_number_flagsop_sibling_splicePERL_SCAN_TRAILINGWARN_MISSINGWARN_REDUNDANT
perl 5.21.1
HAS_BACKTRACEHAS_DLADDRHAS_PTRDIFF_THAS_WCSCMPHAS_WCSXFRMI_EXECINFOmarkstack_grow(undocumented)
perl 5.19.10
OP_TYPE_IS_OR_WAS
perl 5.19.9
WARN_EXPERIMENTAL__SIGNATURES
perl 5.19.7
OP_TYPE_IS
perl 5.19.5
WARN_EXPERIMENTAL__POSTDEREF
perl 5.19.4
IS_SAFE_SYSCALLis_safe_syscallWARN_SYSCALLS
perl 5.19.3
PERL_EXIT_ABORTPERL_EXIT_WARNsv_pos_b2u_flags
perl 5.19.2
G_METHOD_NAMED
perl 5.19.1
the case-conversion girlies showed up and they understood the assignment π
toFOLDtoFOLD_AtoLOWER_AtoLOWER_L1toTITLEtoTITLE_AtoUPPER_A
perl 5.18.0
hv_rand_set(undocumented)
perl 5.17.11
WARN_EXPERIMENTAL__SMARTMATCH
perl 5.17.8
isALPHANUMERIC_LC_uvchrisIDCONT_LC_uvchrWARN_EXPERIMENTAL__REGEX_SETS
perl 5.17.7
isALNUMC_LC_uvchrisASCII_LC_uvchrisBLANK_LC_uvchrisPSXSPC_LC_uvchrisWORDCHAR_LC_uvchrisXDIGIT_LC_uvchrSvREFCNT_dec_NNSvTRUE_NNSvTRUE_nomg_NN
perl 5.17.6
READ_XDIGIT
perl 5.17.5
WARN_EXPERIMENTAL__LEXICAL_SUBS
perl 5.17.4
GV_SUPERHAS_IP_MREQ_SOURCEnewMYSUB(undocumented)newSVpadname(marked experimental)PadARRAY(marked experimental)PadlistARRAY(marked experimental)PadlistMAX(marked experimental)PadlistNAMES(marked experimental)PadlistNAMESARRAY(marked experimental)PadlistNAMESMAX(marked experimental)PadlistREFCNT(marked experimental)PadMAX(marked experimental)PadnameLEN(marked experimental)PadnamelistARRAY(marked experimental)PadnamelistMAX(marked experimental)PadnamePV(marked experimental)PadnameSV(marked experimental)PadnameUTF8(marked experimental)PL_comppad_name(marked experimental)WARN_EXPERIMENTAL
perl 5.17.2
HAS_IP_MREQPERL_RELOCATABLE_INCsv_copypv_flagssv_copypv_nomgsv_vcatpvfn_flags
perl 5.17.1
alloccopstash(marked experimental)CopSTASHPV_set
perl 5.16.0
CopLABEL_lenCopLABEL_len_flags
perl 5.15.8
HAS_IPV6_MREQHAS_SOCKADDR_IN6is_utf8_char_bufwrap_op_checker
perl 5.15.7
HAS_ISBLANK
perl 5.15.6
newCONSTSUB_flags
okay so from here on the compatibility roster is just a lot π but we're doing every single one, no cap β that's literally the whole point of this page. Here we go bestie, version by version π«Ά
π¦ perl 5.15.4
gv_autoload_pv(undocumented)gv_autoload_pvn(undocumented)gv_autoload_sv(undocumented)gv_fetchmethod_pv_flags(marked experimental) (undocumented)gv_fetchmethod_pvn_flags(marked experimental) (undocumented)gv_fetchmethod_sv_flags(marked experimental) (undocumented)gv_fetchmeth_pvgv_fetchmeth_pv_autoloadgv_fetchmeth_pvngv_fetchmeth_pvn_autoloadgv_fetchmeth_svgv_fetchmeth_sv_autoloadgv_init_pvgv_init_svHvENAMELENHvENAMEUTF8HvNAMELENHvNAMEUTF8newGVgen_flags(undocumented)sv_derived_from_pvsv_derived_from_pvnsv_derived_from_svsv_does_pvsv_does_pvnsv_does_svwhichsig_pvwhichsig_pvnwhichsig_sv
π perl 5.15.3
GV_ADDMGgv_fetchsv_nomgGV_NO_SVGMAGICI_STDBOOLQUAD_IS___INT64
π perl 5.15.2
ST_INO_SIGNST_INO_SIZEXS_EXTERNAL(undocumented)XS_INTERNAL(undocumented)
β¨ perl 5.15.1
the pad era, we love to see it π§
cv_clonepad_add_anonpad_add_name_pvpad_add_name_pvnpad_add_name_pvspad_add_name_svpad_alloc(marked experimental)pad_findmy_pvpad_findmy_pvnpad_findmy_pvspad_findmy_svpad_newpad_tidy(marked experimental)
πΈ perl 5.13.10
WARN_NONCHARWARN_NON_UNICODEWARN_SURROGATE
π perl 5.13.9
unicode girlies rise π¦ look at all these UNICODE_ and UTF8_ twins β yes, both sets, every one:
HAS_SIN6_SCOPE_IDPERL_PV_ESCAPE_NONASCIIUNICODE_DISALLOW_ILLEGAL_INTERCHANGEUNICODE_DISALLOW_NONCHARUNICODE_DISALLOW_SUPERUNICODE_DISALLOW_SURROGATEUNICODE_IS_NONCHARUNICODE_IS_SUPERUNICODE_WARN_ILLEGAL_INTERCHANGEUNICODE_WARN_NONCHARUNICODE_WARN_SUPERUNICODE_WARN_SURROGATEUTF8_DISALLOW_ILLEGAL_INTERCHANGEUTF8_DISALLOW_NONCHARUTF8_DISALLOW_SUPERUTF8_DISALLOW_SURROGATEUTF8_WARN_ILLEGAL_INTERCHANGEUTF8_WARN_NONCHARUTF8_WARN_SUPERUTF8_WARN_SURROGATE
π perl 5.13.8
the parse girlies, all four of them, all marked experimental:
parse_arithexpr(marked experimental)parse_fullexpr(marked experimental)parse_listexpr(marked experimental)parse_termexpr(marked experimental)
π perl 5.13.7
okay this one is long β cophh hive represent π
amagic_deref_call(undocumented)bytes_cmp_utf8cophh_2hv(marked experimental)cophh_copy(marked experimental)cophh_delete_pv(marked experimental)cophh_delete_pvn(marked experimental)cophh_delete_pvs(marked experimental)cophh_delete_sv(marked experimental)cophh_fetch_pv(marked experimental)cophh_fetch_pvn(marked experimental)cophh_fetch_pvs(marked experimental)cophh_fetch_sv(marked experimental)cophh_free(marked experimental)COPHH_KEY_UTF8cophh_new_empty(marked experimental)cophh_store_pv(marked experimental)cophh_store_pvn(marked experimental)cophh_store_pvs(marked experimental)cophh_store_sv(marked experimental)cop_hints_2hvcop_hints_fetch_pvcop_hints_fetch_pvncop_hints_fetch_pvscop_hints_fetch_svdirp_dup(undocumented)HvENAMElex_start(marked experimental)newFOROPnewWHILEOPOP_CLASSop_lvalue(marked experimental)op_scope(marked experimental)parse_barestmt(marked experimental)parse_block(marked experimental)parse_label(marked experimental)PARSE_OPTIONALPerl_custom_op_register(undocumented)PL_phaseXopDISABLEXopENABLEXopENTRYXopENTRYCUSTOMXopENTRY_setXopFLAGS
π§ perl 5.13.6
call-checker central π
ck_entersub_args_listck_entersub_args_protock_entersub_args_proto_or_listcv_get_call_checkercv_set_call_checkergv_fetchpvnlex_stuff_pv(marked experimental)LINKLISTload_module_nocontextmg_free_typenewSVpv_shareop_append_elemop_append_listop_contextualizeop_linklistop_prepend_elemparse_stmtseq(marked experimental)PERL_MAGIC_checkcallrv2cv_op_cvRV2CVOPCV_MARK_EARLYRV2CVOPCV_RETURN_NAME_GVsave_pushi32ptr(undocumented)save_pushptrptr(undocumented)savesharedpvssavesharedsvpvsv_catpv_flagssv_catpv_nomgsv_catpvs_flagssv_catpvs_mgsv_catpvs_nomgsv_cmp_flagssv_cmp_locale_flagssv_collxfrm_flagssv_eq_flagssv_setpvs_mgsv_setref_pvs
π perl 5.13.5
hv_copy_hints_hvlex_stuff_pvs(marked experimental)parse_fullstmt(marked experimental)PL_rpeeppsave_hints(undocumented)
β perl 5.13.4
HAS_STATIC_INLINEPERL_STATIC_INLINEXS_APIVERSION_BOOTCHECK
π¦ perl 5.13.3
Perl_blockhook_register(undocumented)
πΈ perl 5.13.2
find_rundefsvfoldEQfoldEQ_localePerl_clone_params_del(undocumented)Perl_clone_params_new(undocumented)Perl_hv_fill(undocumented)sv_dec_nomgsv_dup_inc(undocumented)sv_inc_nomg
π perl 5.13.1
just the one, she's lowkey iconic for it:
sv_2nv_flags
β¨ perl 5.13.0
HAS_PRCTLHAS_PRCTL_SET_NAME
π perl 5.11.5
sv_pos_u2b_flags
π perl 5.11.4
prescan_versionWARN_ILLEGALPROTO
π§ perl 5.11.2
lexer besties assemble π
CHARBITSENTER_with_nameLEAVE_with_namelex_bufutf8(marked experimental)lex_discard_to(marked experimental)lex_grow_linestr(marked experimental)LEX_KEEP_PREVIOUSlex_next_chunk(marked experimental)lex_peek_unichar(marked experimental)lex_read_space(marked experimental)lex_read_to(marked experimental)lex_read_unichar(marked experimental)lex_stuff_pvn(marked experimental)lex_stuff_sv(marked experimental)LEX_STUFF_UTF8lex_unstuff(marked experimental)PL_keyword_plugin(marked experimental)toLOWER_LATIN1
π¦ perl 5.11.0
gv_add_by_type(undocumented)Gv_AMupdate(undocumented)is_ascii_stringis_invariant_stringis_utf8_invariant_stringPL_opfreehookPUSH_MULTICALLre_dup_gutssave_adelete(undocumented)save_aelem_flags(undocumented)save_hdelete(undocumented)save_helem_flags(undocumented)setdefoutSV_FORCE_UTF8_UPGRADESvOOK_offsetSVt_REGEXPsv_utf8_upgrade_flags_growWARN_IMPRECISION
π perl 5.10.1
lots of HAS_ and _R energy in this era, we're so back π
GMTIME_MAXGMTIME_MINHASATTRIBUTE_DEPRECATEDHAS_BUILTIN_EXPECTHAS_GETADDRINFOHAS_GETNAMEINFOHAS_INETNTOPHAS_INETPTONHAS_TIMEGMHvMROMETAI_SYS_POLLLOCALTIME_MAXLOCALTIME_MINMRO_GET_PRIVATE_DATANV_OVERFLOWS_INTEGERS_ATPerl_mro_get_from_name(undocumented)Perl_mro_register(undocumented)Perl_mro_set_mro(undocumented)Perl_mro_set_private_data(undocumented)PERL_USE_DEVELSAVEFREEOPsave_op(undocumented)save_padsv_and_mortalize(undocumented)save_pushptr(undocumented)sv_insert_flags
π«Ά perl 5.10.0
the _r thread-safe feast, genuinely so many π
HAS_ASCTIME_RHAS_CRYPT_RHAS_CTIME_RHAS_DRAND48_RHAS_GETGRENT_RHAS_GETGRGID_RHAS_GETGRNAM_RHAS_GETHOSTBYADDR_RHAS_GETHOSTBYNAME_RHAS_GETHOSTENT_RHAS_GETLOGIN_RHAS_GETNETBYADDR_RHAS_GETNETBYNAME_RHAS_GETNETENT_RHAS_GETPROTOBYNAME_RHAS_GETPROTOBYNUMBER_RHAS_GETPROTOENT_RHAS_GETPWENT_RHAS_GETPWNAM_RHAS_GETPWUID_RHAS_GETSERVBYNAME_RHAS_GETSERVBYPORT_RHAS_GETSERVENT_RHAS_GETSPNAM_RHAS_GMTIME_RHAS_LOCALTIME_RHAS_OFF64_THAS_PTHREAD_ATFORKHAS_RANDOM_RHAS_READDIR64_RHAS_READDIR_RHAS_SETRESGID_PROTOHAS_SETRESUID_PROTOHAS_SRAND48_RHAS_SRANDOM_RHAS_STRERROR_RHAS_TMPNAM_RHAS_TTYNAME_RLOCALTIME_R_NEEDS_TZSETSTART_MY_CXTsv_destroyableUSE_ITHREADSUVf(DEPRECATED)
β οΈ bestie heads up: UVf is DEPRECATED. Like, it's in the list, but it's on the deprecated list, so don't come for me when I tell you to be careful with it π
π¦ perl 5.9.5
CopLABELfind_runcvgv_fetchfile_flagsHAS_CTERMIDHAS_PTHREAD_YIELDHAS_SIGNBITL_R_TZSETmro_get_linear_isamro_method_changed_inmy_dirfd(undocumented)Perl_av_create_and_push(undocumented)Perl_av_create_and_unshift_one(undocumented)Perl_signbit(marked experimental)pregcompPRINTF_FORMAT_NULL_OKptr_table_fetch(undocumented)ptr_table_free(undocumented)ptr_table_new(undocumented)ptr_table_split(undocumented)ptr_table_store(undocumented)re_compile(undocumented)savesharedpvnscan_vstring(undocumented)upg_version
πΈ perl 5.9.4
gv_name_set(undocumented)GV_NOTQUALHAS_BUILTIN_CHOOSE_EXPRHAS_C99_VARIADIC_MACROSmy_vsnprintfnewXS_flags(marked experimental) (undocumented)PERL_MAGIC_hintsPERL_MAGIC_hintselemPerl_PerlIO_context_layers(undocumented)sv_doessv_nounlocking(DEPRECATED)sv_usepvn_flags
β οΈ and sv_nounlocking is DEPRECATED too, so same energy β it's listed, it exists, but it's deprecated, periodt.
and we are not done, bestie, there's still more roster below β¬οΈ keep scrolling π
π« perl 5.9.3 π«
okay so this era ate, no cap β look at this whole pile of new stuff:
dMULTICALLdorefβ undocumented πgv_const_svGV_NOADD_NOINITGV_NOEXPANDHASATTRIBUTE_FORMATHASATTRIBUTE_MALLOCHASATTRIBUTE_NONNULLHASATTRIBUTE_NORETURNHASATTRIBUTE_PUREHASATTRIBUTE_UNUSEDHASATTRIBUTE_WARN_UNUSED_RESULTHAS_CLEARENVHAS_FUTIMESHAS_MODFL_PROTOHAS_SNPRINTFHAS_UNSETENVHAS_VSNPRINTFhv_name_setβ undocumented πis_utf8_string_loclenLIBM_LIB_VERSIONMULTICALLnewGIVENOPnewSVhekPerl_hv_eiter_pβ undocumented πPerl_hv_eiter_setβ undocumented πPerl_hv_placeholders_getβ undocumented πPerl_hv_placeholders_setβ undocumented πPerl_hv_riter_pβ undocumented πPerl_hv_riter_setβ undocumented πPERLIO_FUNCS_DECLβ undocumented πPERL_MAGIC_arylen_pPERL_MAGIC_rhashPERL_MAGIC_symtabPOP_MULTICALLsavepvsseedβ undocumented πshare_hekβ undocumented πsortsv_flagsSvPVbytex_nolenSvPV_freeSvPVx_constSvPVx_nolenvverify
like, that's a whole glow-up right there π
π« perl 5.9.2 π«
smaller drop but still cute:
find_rundefsvoffsetβ DEPRECATED π (yes bestie, it's on the way out, don't get attached)op_refcnt_lockβ undocumented πop_refcnt_unlockβ undocumented πPERL_MALLOC_WRAPsavesvpvSvPVbyte_forcevnormal
π« perl 5.9.1 π«
a little six-piece, we love a snack:
hv_clear_placeholdershv_scalarPerl_ceilscan_versionsv_2iv_flagssv_2uv_flags
π« perl 5.9.0 π«
the MY_CXT family reunion, honestly iconic π«Ά
_aMY_CXTaMY_CXTaMY_CXT_dMY_CXThek_dupβ undocumented πMY_CXTMY_CXT_CLONEMY_CXT_INITnew_versionparser_dupβ undocumented πPerl_my_cxt_initβ undocumented π_pMY_CXTpMY_CXTpMY_CXT_save_set_svflagsβ undocumented πSVs_PADSTALEvcmpvnumifyvstringify
the version-stuff trio vcmp / vnumify / vstringify showing up together? we stan a coordinated entrance β¨
π« perl 5.8.9 π«
one (1) single item, a humble lil guy:
Perl_hv_assertβ undocumented π
π« perl 5.8.8 π«
also tiny, also valid:
__ASSERT_rvpv_dupβ undocumented π
π« perl 5.8.3 π«
copy-on-write era bestie π¦
SvIsCOWSvIsCOW_shared_hash
π« perl 5.8.1 π«
okay this one is a whole mixed bag and i'm obsessed:
CvPADLISTβ marked experimental π§ͺHAS_COPYSIGNLHAS_FAST_STDIOHAS_ILOGBLHAS_PTHREAD_ATTR_SETSCOPEHAS_SCALBNLHAS_TM_TM_GMTOFFIN_PERL_RUNTIMEis_utf8_string_locpacklistPL_comppadβ marked experimental π§ͺSAVEBOOLsavestack_grow_cntβ undocumented πsv_cat_decodesv_setpvivβ DEPRECATED πsv_setpviv_mgβ DEPRECATED πSvVOKunpackstring
heads up babes: those two sv_setpviv ones are DEPRECATED, so likeβ¦ don't build your whole personality on them π
π« perl 5.8.0 π«
and now for the reentrant-function-prototype wall of fame β genuinely a lot, but every single one is here because i would never do you like that π
ASCTIME_R_PROTOCRYPT_R_PROTOCTERMID_R_PROTOCTIME_R_PROTODRAND48_R_PROTOENDGRENT_R_PROTOENDHOSTENT_R_PROTOENDNETENT_R_PROTOENDPROTOENT_R_PROTOENDPWENT_R_PROTOENDSERVENT_R_PROTOGETGRENT_R_PROTOGETGRGID_R_PROTOGETGRNAM_R_PROTOGETHOSTBYADDR_R_PROTOGETHOSTBYNAME_R_PROTOGETHOSTENT_R_PROTOGETLOGIN_R_PROTOGETNETBYADDR_R_PROTOGETNETBYNAME_R_PROTOGETNETENT_R_PROTOGETPROTOBYNAME_R_PROTOGETPROTOBYNUMBER_R_PROTOGETPROTOENT_R_PROTOGETPWENT_R_PROTOGETPWNAM_R_PROTOGETPWUID_R_PROTOGETSERVBYNAME_R_PROTOGETSERVBYPORT_R_PROTOGETSERVENT_R_PROTOGETSPNAM_R_PROTOGMTIME_R_PROTOHAS_TIMEHAS_TM_TM_ZONEHeUTF8hv_iternext_flagsβ marked experimental π§ͺHV_ITERNEXT_WANTPLACEHOLDERShv_store_flagsβ marked experimental π§ͺ β undocumented πI_CRYPTLOCALTIME_R_PROTOnothreadhookRANDOM_R_PROTOREADDIR64_R_PROTOREADDIR_R_PROTOSETGRENT_R_PROTOSETHOSTENT_R_PROTOSETLOCALE_R_PROTOSETNETENT_R_PROTOSETPROTOENT_R_PROTOSETPWENT_R_PROTOSETSERVENT_R_PROTOSRAND48_R_PROTOSRANDOM_R_PROTOSTRERROR_R_PROTOTMPNAM_R_PROTOTTYNAME_R_PROTO
breathe. you made it. HeUTF8 is lowkey the main character of that list tbh π
π« perl 5.7.3 π«
this era was BUSY, it's giving "i have range" π₯
atfork_lockβ undocumented πatfork_unlockβ undocumented πcustom_op_descβ DEPRECATED πcustom_op_nameβ DEPRECATED πdebstackβ undocumented πdebstackptrsβ undocumented πfoldEQ_utf8fp_dupβ undocumented πgp_dupβ undocumented πgv_fetchmeth_autoloadHAS_DIRFDHAS_FINITEHAS_FINITELHAS_ISINFHAS_PROCSELFEXEhe_dupβ undocumented πibcmp_utf8mg_dupβ undocumented πmy_forkβ undocumented πmy_socketpairβ undocumented πOP_DESCOP_NAMEPerl_debβ undocumented πPerl_deb_nocontextβ undocumented πperl_destructPERL_EXIT_DESTRUCT_ENDPerlIO_clearerrPerlIO_closePerlIO_eofPerlIO_errorPerlIO_filenoPerlIO_flushPerlIO_get_basePerlIO_get_bufsizPerlIO_get_cntPerlIO_get_ptrPERLIO_K_MULTIARGPerlIO_readPerlIO_seekPerlIO_set_cntPerlIO_setlinebufPerlIO_set_ptrcntPerlIO_stderrPerlIO_stdinPerlIO_stdoutPerlIO_tellPerlIO_unreadβ undocumented πPerlIO_writePerl_isfinitePerl_isinfPL_peeppPROCSELFEXE_PATHpv_uni_displaysavesharedpvsave_shared_pvrefβ undocumented πsi_dupβ undocumented πsortsvss_dupβ undocumented πsv_copypvsv_dupβ undocumented πSvLOCKsv_magicextsv_nosharingsv_recode_to_utf8SvSHAREsv_uni_displaySvUNLOCKUNI_DISPLAY_BACKSLASHUNI_DISPLAY_ISPRINTUNI_DISPLAY_QQUNI_DISPLAY_REGEXunpack_strβ DEPRECATED πuvchr_to_utf8_flagsvdebβ undocumented π
the SvLOCK / SvSHARE / SvUNLOCK trio really said "we're a set" π
π« perl 5.7.2 π«
another big one, sorry to your scroll finger π«Ά
DB_VERSION_MAJOR_CFGDB_VERSION_MINOR_CFGDB_VERSION_PATCH_CFGgetcwd_svHAS_FCHDIRHAS_FLOCK_PROTOHAS_NL_LANGINFOHAS_SOCKATMARK_PROTOHAS_STRFTIMEHAS_SYSCALL_PROTOHAS_USLEEP_PROTOI_LANGINFOinit_tmβ undocumented πmini_mktimeop_nullOSVERSPerl_callocβ undocumented πPerl_mallocβ undocumented πPerl_mfreeβ undocumented πPerl_my_strftimeβ undocumented πPerl_reallocβ undocumented πPERL_TARGETARCHsv_catpvn_flagssv_catsv_flagssv_utf8_upgrade_flagssv_utf8_upgrade_nomgU_32UNICODE_IS_REPLACEMENT
π« perl 5.7.1 π«
genuinely the longest one, i'm not even sorry, every name matters π
bytes_from_utf8β marked experimental π§ͺdo_opennβ undocumented πFCNTL_CAN_LOCKgv_handlerβ undocumented πHAS_FSYNCHAS_GETITIMERHAS_GETPAGESIZEHAS_READVHAS_RECVMSGHAS_SBRK_PROTOHAS_SENDMSGHAS_SETITIMERHAS_SIGPROCMASKHAS_SOCKATMARKHAS_STRTOQHAS_STRUCT_CMSGHDRHAS_STRUCT_MSGHDRHAS_UALARMHAS_USLEEPHAS_WRITEVisALNUM_LC_uvchrisALPHA_LC_uvchrisCNTRL_LC_uvchrisDIGIT_LC_uvchrisGRAPH_LC_uvchrisIDFIRST_LC_uvchrisLOWER_LC_uvchris_lvalue_subβ undocumented πisPRINT_LC_uvchrisPUNCT_LC_uvchrisSPACE_LC_uvchrisUPPER_LC_uvchrmy_popen_listβ undocumented πNEED_VA_COPYPerlIO_apply_layersPerlIO_binmodePerlIO_debugPERLIO_F_APPENDPERLIO_F_CANREADPERLIO_F_CANWRITEPERLIO_F_CRLFPERLIO_F_EOFPERLIO_F_ERRORPERLIO_F_FASTGETSPERLIO_F_LINEBUFPERLIO_F_OPENPERLIO_F_RDBUFPERLIO_F_TEMPPERLIO_F_TRUNCATEPERLIO_F_UNBUFPERLIO_F_UTF8PERLIO_F_WRBUFPERLIO_K_BUFFEREDPERLIO_K_CANCRLFPERLIO_K_FASTGETSPERLIO_K_RAWPerl_printf_nocontextβ undocumented πPOPpbytexSAVEMORTALIZESVSIG_SIZESTDIO_PTR_LVAL_SETS_CNTsv_force_normal_flagssv_setref_uvsv_unref_flagssv_utf8_upgradeU32_ALIGNMENT_REQUIREDUNICODE_IS_SURROGATEUSE_PERLIOUTF8_CHECK_ONLYutf8_lengthutf8n_to_uvchruvchr_to_utf8UVXf
the whole PERLIO_F_* squad in one drop?? that's a vibe check and they passed π
π« perl 5.7.0 π«
short and sweet, a lil palette cleanser:
FILE_baseFILE_bufsizFILE_cntFILE_ptrPerlIO_fillβ undocumented π
π« perl 5.6.1 π«
and the final one in this batch β look at this lineup, it's giving legacy legend π
apply_attrs_stringβ marked experimental π§ͺ β undocumented πbytes_to_utf8β marked experimental π§ͺgv_efullname4β undocumented πgv_fullname4β undocumented πHAS_FREXPLHAS_ISNANHAS_ISNANLHAS_MODFLisPSXSPC_LCisUTF8_CHARis_utf8_stringNV_PRESERVES_UV_BITSNVSIZEPerl_isnanPERL_PRIeldblPERL_SCNfldblsave_generic_pvrefβ undocumented πSvGAMAGICutf8_to_bytesβ marked experimental π§ͺutf8_to_uvchrβ DEPRECATED πutf8_to_uvchr_buf
ok tiny reminder before you go copy-pasting:utf8_to_uvchris DEPRECATED andbytes_to_utf8/utf8_to_bytes/apply_attrs_stringare marked experimental β so treat those with the respect (and caution) they deserve, bestie π«Ά
Like, the whole roster is long, okay? So here's the 5.6.0 crew β every single name, nothing cut, nothing merged π
πΈ perl 5.6.0
av_deleteav_existscall_atexit(undocumented)caller_cxCopLINECPPLASTCPPRUNdo_open9(DEPRECATED) (undocumented)DO_UTF8Drand01dump_alldump_eval(undocumented)dump_form(undocumented)dump_packsubsdump_sub(undocumented)FFLUSH_NULLget_context(undocumented)get_ppaddr(undocumented)Gid_t_fGid_t_signGid_t_sizegv_dump(undocumented)HAS_ACCESSHAS_ATOLLHAS_DRAND48_PROTOHAS_EACCESSHAS_FD_SETHAS_FSEEKOHAS_FTELLOHAS_GETCWDHAS_GETHOSTNAMEHAS_GETSPNAMHAS_INT64_THAS_LDBL_DIGHAS_LSEEK_PROTOHAS_MADVISEHAS_MKDTEMPHAS_MKSTEMPHAS_MKSTEMPSHAS_MMAPHAS_MPROTECTHAS_MSYNCHAS_MUNMAPHAS_SQRTLHAS_STRTOLDHAS_STRTOLLHAS_STRTOULLHAS_STRTOUQHAS_TELLDIR_PROTOI16SIZEI16TYPEI32SIZEI32TYPEI64SIZEI64TYPEI8SIZEI8TYPEI_INTTYPESI_NETINET_TCPI_POLL
Okay the HAS_* block ate and left no crumbs β that's like every "does this platform even have this function" check you could ever need, and yes HAS_MKSTEMPS is a real one, not a typo bestie π«Ά and the I16/I32/I64/I8 SIZE/TYPE squad is right there too.
Then comes the alphabet soup portion of the program π β literally every character-class check, in _LC, _LC_utf8_safe, _utf8_safe, and _uvchr flavors:
isALNUMC_LCisALPHA_LC_utf8_safeisALPHANUMERIC_LC_utf8_safeisALPHANUMERIC_utf8_safeisALPHANUMERIC_uvchrisALPHA_utf8_safeisALPHA_uvchrisBLANK_LC_utf8_safeisBLANK_utf8_safeisBLANK_uvchrisCNTRL_LCisCNTRL_LC_utf8_safeisCNTRL_utf8_safeisCNTRL_uvchrisDIGIT_LC_utf8_safeisDIGIT_utf8_safeisDIGIT_uvchrisGRAPH_LCisGRAPH_LC_utf8_safeisGRAPH_utf8_safeisGRAPH_uvchrI_SHADOWisIDCONT_LC_utf8_safeisIDCONT_utf8_safeisIDCONT_uvchrisIDFIRST_LC_utf8_safeisIDFIRST_utf8_safeisIDFIRST_uvchrisLOWER_LC_utf8_safeisLOWER_utf8_safeisLOWER_uvchrisPRINT_LC_utf8_safeisPRINT_utf8_safeisPRINT_uvchrisPSXSPC_LC_utf8_safeisPSXSPC_utf8_safeisPSXSPC_uvchrisPUNCT_LCisPUNCT_LC_utf8_safeisPUNCT_utf8_safeisPUNCT_uvchrisSPACE_LC_utf8_safeisSPACE_utf8_safeisSPACE_uvchrisUPPER_LC_utf8_safeisUPPER_utf8_safeisUPPER_uvchris_utf8_char(DEPRECATED)isWORDCHAR_LC_utf8_safeisWORDCHAR_utf8_safeisWORDCHAR_uvchrisXDIGIT_LC_utf8_safeisXDIGIT_utf8_safeisXDIGIT_uvchrI_SYSLOGI_SYSUIOI_SYSUTSNAMELSEEKSIZEmagic_dump(undocumented)Mmap_tMULTIPLICITYmy_atofmy_fflush_all(undocumented)newANONATTRSUB(undocumented)newATTRSUBnewXSnewXSprotoOff_t_sizeop_dumpOPpEARLY_CVPERL_ASYNC_CHECKPerl_atan2Perl_cosPERL_EXIT_EXPECTEDPerl_expPerl_floorPerl_fmodPerl_frexpPerl_logPerl_modfperl_parsePerl_powPERL_PRIfldblPERL_PRIgldblPERL_REVISION(DEPRECATED)Perl_sinPerl_sqrtPERL_SYS_INIT3PHOSTNAMEPL_checkPL_exit_flagsPL_runopspmop_dump(undocumented)POPulQUAD_IS_INTQUAD_IS_INT64_TQUAD_IS_LONGQUAD_IS_LONG_LONGQUADKINDRand_seed_trequire_pvsafesyscallocsafesysfreesafesysmallocsafesysreallocsave_alloc(undocumented)SAVEDESTRUCTORSAVEDESTRUCTOR_XSAVEI8save_vptr(undocumented)scan_binSCHED_YIELDseedDrand01set_context(undocumented)SITELIB_STEMSize_t_sizeSock_size_tSTDIO_PTR_LVALUESTDIO_STREAM_ARRAYStrtolStrtoulsv_2pvutf8sv_force_normalSvIOK_notUVSvIOK_only_UVSvIOK_UVsv_len_utf8sv_len_utf8_nomgSvPOK_only_UTF8sv_pos_b2usv_pos_u2bSvPVbyte_nolenSvPVbytexSvPVbytex_forceSvPVutf8SvPVutf8_forceSvPVutf8_nolenSvPVutf8xSvPVutf8x_forcesv_rvweakenSvUOKsv_utf8_decodesv_utf8_downgradesv_utf8_encodeSvUTF8_offSvUTF8_ontoFOLD_utf8_safetoFOLD_uvchrtoLOWER_utf8_safetoLOWER_uvchrtoTITLE_utf8_safetoTITLE_uvchrtoUPPER_utf8_safetoUPPER_uvchrU16SIZEU16TYPEU32SIZEU32TYPEU64SIZEU64TYPEU8SIZEU8TYPEUid_t_fUid_t_signUid_t_sizeUquad_tUSE_64_BIT_ALLUSE_64_BIT_INTUSE_LARGE_FILESUSE_STDIO_BASEUSE_STDIO_PTRUSE_THREADSUTF8_CHK_SKIPutf8_distanceutf8_hopUTF8_MAXBYTESUTF8_SAFE_SKIPUTF8_SKIPUTF8SKIPvcroakvform
The SvPVutf8* / SvPVbyte* / SvUTF8_* / sv_utf8_* cluster is lowkey the whole encoding era in one screenshot, and the toFOLD_ / toLOWER_ / toTITLE_ / toUPPER_ quad is giving case-mapping main character energy π and yeah, UTF8SKIP, UTF8_SKIP and UTF8_CHK_SKIP are three separate things. Iconic. Not confusing at all. π
π perl 5.005_03
Small but mighty era, seven whole entries:
get_vtbl(undocumented)I_PTHREADPOPpxsave_generic_svref(undocumented)SELECT_MIN_BITSSvTIED_objUSE_STAT_BLOCKS
π perl 5.005
The networking-plus-everything era, fr fr β all the HAS_GET*ENT / HAS_END*ENT / HAS_SET*ENT family reunion is here π«Ά
debop(undocumented)debprofdump(undocumented)DOUBLESIZEfbm_compilefbm_instrget_op_descs(undocumented)get_op_names(undocumented)GRPASSWDHAS_CSHHAS_ENDGRENTHAS_ENDHOSTENTHAS_ENDNETENTHAS_ENDPROTOENTHAS_ENDPWENTHAS_ENDSERVENTHAS_GETGRENTHAS_GETHOSTBYADDRHAS_GETHOSTBYNAMEHAS_GETHOST_PROTOSHAS_GETNETBYADDRHAS_GETNETBYNAMEHAS_GETNETENTHAS_GETNET_PROTOSHAS_GETPROTOBYNAMEHAS_GETPROTOBYNUMBERHAS_GETPROTOENTHAS_GETPROTO_PROTOSHAS_GETPWENTHAS_GETSERVBYNAMEHAS_GETSERVBYPORTHAS_GETSERVENTHAS_GETSERV_PROTOSHAS_LCHOWNHAS_LONG_DOUBLEHAS_LONG_LONGHAS_SCHED_YIELDHAS_SETGRENTHAS_SETHOSTENTHAS_SETNETENTHAS_SETPROTOENTHAS_SETPWENTHAS_SETSERVENTHAS_SETVBUFI_ARPA_INETI_NETDBinit_stacks(undocumented)LONG_DOUBLESIZELONGLONGSIZEmg_length(DEPRECATED)mg_size(undocumented)Netdb_hlen_tNetdb_host_tNetdb_name_tNetdb_net_tnewHVhv(undocumented)new_stackinfo(undocumented)Pid_tPL_curpad(marked experimental)PL_in_my_stash(undocumented)PL_maxsysfdPL_modglobalPL_restartopPTRSIZEPWPASSWDregdump(undocumented)sv_peek(undocumented)sv_pvn_nomg(DEPRECATED) (undocumented)SvPVx_force
Heads up bestie:PL_curpadis literally tagged (marked experimental), so don't go building your whole personality on it, k? Andmg_lengthandsv_pvn_nomgare both wearing the (DEPRECATED) badge β respect the badge. π©
π¦ perl 5.004_05
do_binmode(DEPRECATED) (undocumented)GV_NOINITHAS_CHSIZEHAS_GNULIBCPWGECOSsave_aelem(undocumented)save_helem(undocumented)USE_SEMCTL_SEMID_DSUSE_SEMCTL_SEMUN
β perl 5.004
The IN_LOCALE trio!! The locale-era is*_LC squad!! The sv_v*atpvf / sv_v*etpvf family!! This era is giving vintage but make it functional π
ARCHNAMEBIN_EXPblock_gimme(undocumented)call_list(undocumented)delimcpyGIMME_Vgv_autoload4gv_fetchmethod_autoloadG_VOIDHAS_GETTIMEOFDAYHAS_INET_ATONHAS_SETGROUPSHAS_STRTODHAS_STRTOLHAS_STRTOULHePVHeSVKEY_sethv_delayfree_ent(undocumented)hv_free_ent(undocumented)ibcmp_localeIN_LOCALEIN_LOCALE_COMPILETIMEIN_LOCALE_RUNTIMEisALNUM_LCisALPHA_LCisALPHANUMERIC_LCisDIGIT_LCisIDCONT_LCisIDFIRST_LCisLOWER_LCisPRINT_LCisSPACE_LCisUPPER_LCisWORDCHAR_LCJMPENV_JUMPmess_svmy_failure_exit(undocumented)Perl_ck_warner(undocumented)Perl_ck_warner_d(undocumented)Perl_form(undocumented)Perl_mess(undocumented)Perl_newSVpvf(undocumented)Perl_sv_catpvf(undocumented)Perl_sv_catpvf_mg(undocumented)Perl_sv_setpvf(undocumented)Perl_sv_setpvf_mg(undocumented)Perl_warner(undocumented)Perl_warner_nocontext(undocumented)PL_mess_sv(undocumented)POPursignalrsignal_state(undocumented)save_gpSAVEI16SAVESTACK_POSSHORTSIZEsv_cmp_localesv_derived_fromsv_magic_portable(undocumented)SvSetMagicSVSvSetMagicSV_nostealSvSetSV_nostealSvTAINTEDSvTAINTED_offSvTAINTED_onsv_vcatpvfsv_vcatpvf_mgsv_vcatpvfnsv_vsetpvfsv_vsetpvf_mgsv_vsetpvfnTimevaltoLOWER_LCvmessvnewSVpvfvwarner
And that's the 5.004 chapter closed β the older vintages are still queued up, so stay tuned bestie, we're going further back π§β¨
π perl 5.003_07 (or maybe earlier)
okay bestie, brace yourself, because this tier is literally the ancient scrolls ποΈ β everything below goes all the way back to perl 5.003_07 or maybe earlier, which is genuinely what the manpage says. "or maybe earlier." they don't know. iconic honesty π«Ά
two annotations you'll see sprinkled around, so we're clear:
- (undocumented) β the perl docs justβ¦ don't document it. it's still on the list, it still counts, we love an enigma π
- (DEPRECATED) β still there, still works, but it's giving "we don't do that anymore" and you should know that going in π
amagic_call(undocumented) β no docs, all vibes β¨ARCHLIB,ARCHLIB_EXPβ archlib and its_EXPtwinASSUMEβ we assume, bestie π€·aTHX,aTHX_β the classic duoaTHXR(undocumented),aTHXR_(undocumented) β the R-flavoured twins, undocumenteder than the othersAvARRAYav_clear,av_count,av_extend,av_fetch,av_fillAvFILLav_len,av_make,av_pop,av_push,av_shift,av_store,av_tindex,av_top_index,av_undef,av_unshiftaxβ that's it, that's the name πΈBIN,BOM_UTF8,boolSV,BYTEORDERcall_argv,call_method,call_pv,call_svβ the whole call-a-thing squad πC_ARRAY_END,C_ARRAY_LENGTH,CASTFLAGS,CASTNEGFLOAT,CAT2,cBOOLckWARN,ckWARN2,ckWARN2_d,ckWARN3,ckWARN3_d,ckWARN4,ckWARN4_d,ckWARN_dβ the full warning-check family,_dvariants included, nobody gets left behind πCLASSCopFILE,CopFILEAV,CopFILEGV,CopFILEGV_set,CopFILE_set,CopFILESVCopSTASH,CopSTASH_eq,CopSTASHPV,CopSTASH_setCopy,CopyDCPERLscope(DEPRECATED),CPPMINUS,CPPSTDINcroak_no_modify,croak_sv,croak_xs_usage,CSHcv_const_sv,CvDEPTH(undocumented),CvGV,CvSTASH,cv_undefdAX,dAXMARK,DB_Hash_t,DB_Prefix_t,DEFSV,DEFSV_set,die_sv,Direntry_t,dITEMS,dMARK,dMY_CXT_SV,dNOOPdo_close(undocumented),do_join(undocumented),do_open(undocumented),dORIGMARK,do_sprintf(undocumented),dounwind(undocumented),dowantarray(undocumented)dSP,dTARGET,dTHR,dTHX,dTHXa,dTHXoa,dTHXR(undocumented),dUNDERBAR,dVAR,dXCPT,dXSARGS,dXSI32,dXSTARG(undocumented) β yes that's a lot ofds, it's the declaration girlies, they travel in packs πEND_EXTERN_C,ENTER,EOF_NONBLOCK,ERRSV,eval_pv,eval_sv,EXTEND,EXTERN_Cfilter_add,filter_del(undocumented),filter_readFLEXFILENAMES,Fpos_t,Free_t,FREETMPSGconvertG_DISCARD,G_EVAL,G_KEEPERR,G_LIST,G_METHOD,G_NOARGS,G_RETHROW,G_SCALARget_av,get_cv,get_cvn_flags,get_cvs,get_hv,get_svGid_t,GIMME(DEPRECATED)gp_free(undocumented),gp_ref(undocumented)grok_bin,grok_hex,grok_number,GROK_NUMERIC_RADIX,grok_numeric_radix,grok_oct,Groups_tGV_ADD,GV_ADDMULTI,GV_ADDWARNGvAV,gv_AVadd(undocumented)GvCV,gv_efullname(DEPRECATED) (undocumented),gv_efullname3(undocumented)gv_fetchfile,gv_fetchmeth,gv_fetchmethod,gv_fetchpv,gv_fetchpvn_flags,gv_fetchpvs,gv_fetchsvgv_fullname(DEPRECATED) (undocumented),gv_fullname3(undocumented)GvHV,gv_HVadd(undocumented)gv_init,gv_init_pvngv_IOadd(undocumented)gv_stashpv,gv_stashpvn,gv_stashpvs,gv_stashsvGvSV,GvSVn
π the entire HAS_* cinematic universe
bestie this is the biggest family on the list and no I will not be abbreviating it, every single one is getting its moment π
HAS_ALARM,HAS_CHOWN,HAS_CHROOT,HAS_CRYPT,HAS_CUSERID,HAS_DIFFTIME,HAS_DLERROR,HAS_DUP2HAS_FCHMOD,HAS_FCHOWN,HAS_FCNTL,HAS_FGETPOS,HAS_FLOCK,HAS_FORK,HAS_FPATHCONF,HAS_FSETPOSHAS_GETGROUPS,HAS_GETHOSTENT,HAS_GETLOGIN,HAS_GETPGID,HAS_GETPGRP,HAS_GETPPID,HAS_GETPRIORITY,HAS_HTONL,HAS_HTONSHAS_ISASCII,HAS_KILLPG,HAS_LINK,HAS_LOCALECONV,HAS_LOCKF,HAS_LSTAT,HAS_MBLEN,HAS_MBSTOWCS,HAS_MBTOWCHAS_MKDIR,HAS_MKFIFO,HAS_MKTIME,HAS_MSG,HAS_NICE,HAS_NTOHL,HAS_NTOHS,HAS_OPEN3,HAS_PATHCONF,HAS_PAUSEHAS_PIPE,HAS_POLL,HAS_QUAD,HAS_READDIR,HAS_READLINK,HAS_RENAME,HAS_REWINDDIR,HAS_RMDIR,HAS_SEEKDIR,HAS_SELECT,HAS_SEMHAS_SETEGID,HAS_SETEUID,HAS_SETLINEBUF,HAS_SETLOCALE,HAS_SETPGID,HAS_SETPGRP,HAS_SETPRIORITY,HAS_SETREGID,HAS_SETRESGID,HAS_SETRESUID,HAS_SETREUID,HAS_SETSIDβ the wholeSET*crew, obsessed πHAS_SHM,HAS_SHMAT_PROTOTYPE,HAS_SIGACTION,HAS_SIGSETJMP,HAS_SOCKET,HAS_SOCKETPAIR,HAS_STRCOLL,HAS_STRXFRM,HAS_SYMLINK,HAS_SYSCALL,HAS_SYSCONF,HAS_SYS_ERRLIST,HAS_SYSTEMHAS_TCGETPGRP,HAS_TCSETPGRP,HAS_TELLDIR,HAS_TIMES,HAS_TRUNCATE,HAS_TZNAME,HAS_UMASK,HAS_UNAME,HAS_WAIT4,HAS_WAITPID,HAS_WCSTOMBS,HAS_WCTOMBβ and that's the whole alphabet run, no skips, no cap π«Ά
HEf_SVKEY,HeHASH,HeKEY,HeKLEN,HeSVKEY,HeSVKEY_force,HeVALhv_clear,hv_delete,hv_delete_ent,hv_exists,hv_exists_ent,hv_fetch,hv_fetch_ent,hv_fetchsHvFILLhv_iterinit,hv_iterkey,hv_iterkeysv,hv_iternext,hv_iternextsv,hv_iterval,hv_ksplit(undocumented),hv_magicHvNAME,HvNAMELEN_gethv_store,hv_store_ent,hv_stores,hv_undefI_32,ibcmp,I_DIRENT,I_DLFCN,I_GRP,I_LOCALE,I_NETINET_IN,IN_PERL_COMPILETIME,instr,INT16_C,INT2PTR,INT32_C,INTMAX_C,INTSIZE,I_PWD
π¦ the is* alphabet mafia
we're not done with the family reunion, here come the character classifiers πΈ (and yes, _A, _L1 and _LC variants are all here, every single one is valid and loved)
isALNUM,isALNUM_A,isALNUMC,isALNUMC_A,isALNUMC_L1isALPHA,isALPHA_A,isALPHA_L1isALPHANUMERIC,isALPHANUMERIC_A,isALPHANUMERIC_L1isASCII,isASCII_A,isASCII_L1,isASCII_LC,isASCII_utf8_safe,isASCII_uvchrisBLANK,isBLANK_A,isBLANK_L1,isBLANK_LCisCNTRL,isCNTRL_A,isCNTRL_L1isDIGIT,isDIGIT_A,isDIGIT_L1isGRAPH,isGRAPH_A,isGRAPH_L1isGV_with_GPβ sitting right in the middle of theisparty, main character energy honestly πisIDCONT,isIDCONT_A,isIDCONT_L1isIDFIRST,isIDFIRST_A,isIDFIRST_L1isLOWER,isLOWER_A,isLOWER_L1IS_NUMBER_GREATER_THAN_UV_MAX,IS_NUMBER_INFINITY,IS_NUMBER_IN_UV,IS_NUMBER_NAN,IS_NUMBER_NEG,IS_NUMBER_NOT_INTβ the number-flag squad, interrupting theisrun but they were here first so we respect the ordering πisOCTAL,isOCTAL_A,isOCTAL_L1isPRINT,isPRINT_A,isPRINT_L1isPSXSPC,isPSXSPC_A,isPSXSPC_L1isPUNCT,isPUNCT_A,isPUNCT_L1isSPACE,isSPACE_A,isSPACE_L1isUPPER,isUPPER_A,isUPPER_L1isWORDCHAR,isWORDCHAR_A,isWORDCHAR_L1isXDIGIT,isXDIGIT_A,isXDIGIT_L1,isXDIGIT_LCβ and that's the whole set, ate and left no crumbs π₯
I_SYS_DIR,I_SYS_FILE,I_SYS_IOCTL,I_SYS_PARAM,I_SYS_RESOURCE,I_SYS_SELECT,I_SYS_STAT,I_SYS_TIME,I_SYS_TIMES,I_SYS_TYPES,I_SYS_UN,I_SYS_WAITitems,I_TERMIOS,I_TIME,I_UNISTD,I_UTIME,I_Vβ theI_*header-check brigade, back together again β¨IVdf,IV_MAX,IV_MIN,IVSIZE,IVTYPE,ixLATIN1_TO_NATIVE,LEAVE,leave_scope(undocumented),LIKELY,load_module,LOC_SED,LONGSIZE,looks_like_numberMalloc_t,MARK,MEM_ALIGNBYTES,memCHRs,memEQ,memEQs,memNE,memNEs,memzeromg_clear,mg_copy,mg_find,mg_findext,mg_free,mg_get,mg_magical,mg_setMode_t,Move,MoveDmPUSHi,mPUSHn,mPUSHp,mPUSHs,mPUSHuMUTABLE_AV,MUTABLE_CV,MUTABLE_GV,MUTABLE_HV,MUTABLE_IO,MUTABLE_PTR,MUTABLE_SVβ theMUTABLE_*set, all seven, we stan πmXPUSHi,mXPUSHn,mXPUSHp,mXPUSHs,mXPUSHuβ theXversions of the push girlies, elevated πmy_exit,my_pclose(undocumented),my_popen(undocumented),my_setenv,my_sprintf(DEPRECATED),my_strlcat,my_strlcpy,my_strnlenNATIVE_TO_LATIN1,NATIVE_TO_UNI
π the new* construction zone
every op constructor in the game, and the undocumented ones are lowkey my favourites π
newANONHASH(undocumented),newANONLIST(undocumented),newANONSUB(undocumented)newASSIGNOPnewAV,newAVREF(undocumented)newBINOPnewCONDOP,newCONSTSUBnewCVREF(undocumented)newFORM(undocumented)newGVgen(undocumented),newGVOP,newGVREF(undocumented)newHV,newHVREF(undocumented)newIO(undocumented)newLISTOP,newLOGOP,newLOOPEX,newLOOPOPnewNULLLISTnewOPnewPMOPnewPROG(undocumented),newPVOPnewRANGE,newRV,newRV_inc,newRV_noinc
and that's where this part of the scroll cuts off π don't close the tab though, because we are so not done β more of these ancient symbols are coming right up, keep scrolling bestie π«Άβ¨
okay so we're deep in the big list now, bestie β we're picking up at the N's and there is no skipping allowed, every single name goes in π
Quick legend so nobody gets confused: when I write (undocumented) or (DEPRECATED) after a name, that's straight from the list itself, not me being shady. And when you see (DEPRECATED) (undocumented) together? Yeah, both. Iconic behaviour tbh.
the new crew, they're all here, no crumbs π
newSLICEOPnewSTATEOPnewSUBnewSVnewSVivnewSVnvnewSVOPnewSVpvnewSVpvnnewSVpvn_flagsnewSVpvn_sharenewSVpvn_utf8newSVpvsnewSVpvs_flagsnewSVpvs_sharenewSVREF(undocumented)newSVrvnewSVsvnewSVsv_flagsnewSVsv_nomgnewSV_typenewSVuvnewUNOP
then the three musketeers with the capital N:
NewxNewxcNewxz
ngl the N section is serving variety πΈ
ninstrNOOPNOT_REACHED(undocumented)Nullav(DEPRECATED)NullchNullcv(DEPRECATED)Nullhv(DEPRECATED)NullsvNVefNVffNVgfNVTYPE
moving into O, which is giving main-character energy β¨
Off_tOPf_KIDSop_freeOpHAS_SIBLINGOpLASTSIB_setOpMAYBESIB_setOpMORESIB_setOPpENTERSUB_AMPEROpSIBLINGORIGMARKOSNAME
and then packWARN opens the door to the P section, which is honestly the biggest vibe in the whole list π
packWARNpackWARN2packWARN3packWARN4PERL_ABSperl_allocPERL_BCDVERSION(undocumented)perl_constructPerl_croak(undocumented)Perl_die(undocumented)Perl_eval_pv(undocumented)Perl_eval_sv(undocumented)perl_freePERL_HASHPERL_INT_MAXPERL_INT_MIN
the PerlIO girls, line up π¦
PerlIO_canset_cntPerlIO_exportFILEPerlIO_fast_getsPerlIO_fdopenPerlIO_findFILEPerlIO_getcPerlIO_getposPerlIO_has_basePerlIO_has_cntptrPerlIO_importFILEPerlIO_openPerlIO_printfPerlIO_putcPerlIO_putsPerlIO_releaseFILEPerlIO_reopenPerlIO_rewindPerlIO_setposPerlIO_stdoutfPerlIO_ungetcPerlIO_vprintf
back to the PERL_ constants, we're not even halfway and I'm thriving π
PERL_LOADMOD_DENYPERL_LOADMOD_IMPORT_OPSPERL_LOADMOD_NOIMPORTPERL_LONG_MAXPERL_LONG_MIN
the whole PERL_MAGIC family reunion, everybody say hi π
PERL_MAGIC_arylenPERL_MAGIC_backrefPERL_MAGIC_bmPERL_MAGIC_collxfrmPERL_MAGIC_dbfilePERL_MAGIC_dblinePERL_MAGIC_defelemPERL_MAGIC_envPERL_MAGIC_envelemPERL_MAGIC_extPERL_MAGIC_fmPERL_MAGIC_glob(undocumented)PERL_MAGIC_isaPERL_MAGIC_isaelemPERL_MAGIC_mutex(undocumented)PERL_MAGIC_nkeysPERL_MAGIC_overload(undocumented)PERL_MAGIC_overload_elem(undocumented)PERL_MAGIC_overload_tablePERL_MAGIC_posPERL_MAGIC_qrPERL_MAGIC_regdataPERL_MAGIC_regdatumPERL_MAGIC_regex_globalPERL_MAGIC_sharedPERL_MAGIC_shared_scalarPERL_MAGIC_sigPERL_MAGIC_sigelemPERL_MAGIC_substrPERL_MAGIC_svPERL_MAGIC_taintPERL_MAGIC_tiedPERL_MAGIC_tiedelemPERL_MAGIC_tiedscalarPERL_MAGIC_utf8PERL_MAGIC_uvarPERL_MAGIC_uvar_elemPERL_MAGIC_vecPERL_MAGIC_vstring
okay deep breath, still in the P's π«Ά
Perl_my_snprintf(undocumented)PERL_PV_ESCAPE_ALLPERL_PV_ESCAPE_FIRSTCHARPERL_PV_ESCAPE_NOBACKSLASHPERL_PV_ESCAPE_NOCLEARPERL_PV_ESCAPE_QUOTEPERL_PV_ESCAPE_REPERL_PV_ESCAPE_UNIPERL_PV_ESCAPE_UNI_DETECTPERL_PV_PRETTY_ELLIPSESPERL_PV_PRETTY_LTGTPERL_PV_PRETTY_QUOTEPERL_QUAD_MAXPERL_QUAD_MINperl_runPERL_SCAN_ALLOW_UNDERSCORESPERL_SCAN_DISALLOW_PREFIXPERL_SCAN_GREATER_THAN_UV_MAXPERL_SCAN_SILENT_ILLDIGITPERL_SHORT_MAXPERL_SHORT_MINPERL_SIGNALS_UNSAFE_FLAGPERL_SUBVERSION(DEPRECATED)PERL_SYS_INITPERL_SYS_TERMPERL_UCHAR_MAXPERL_UCHAR_MINPERL_UINT_MAXPERL_UINT_MINPERL_ULONG_MAXPERL_ULONG_MINPERL_UNUSED_ARGPERL_UNUSED_CONTEXTPERL_UNUSED_DECLPERL_UNUSED_RESULTPERL_UNUSED_VARPERL_UQUAD_MAXPERL_UQUAD_MINPERL_USE_GCC_BRACE_GROUPSPERL_USHORT_MAXPERL_USHORT_MIN
the PERL_VERSION crew β notice two of them are marked, respect the label bestie π
PERL_VERSION(DEPRECATED)PERL_VERSION_GEPERL_VERSION_GTPERL_VERSION_LEPERL_VERSION_LTPerl_warn(undocumented)
and now the PL_ squad, which is basically a whole reality show cast π
PL_bufend(undocumented)PL_bufptr(undocumented)PL_compiling(undocumented)PL_copline(undocumented)PL_curcopPL_curstashPL_DBsignal(undocumented)PL_debstash(undocumented)PL_defgvPL_diehook(undocumented)PL_dirty(undocumented)PL_errgvPL_error_count(undocumented)PL_expect(undocumented)PL_hexdigitPL_hints(undocumented)PL_in_my(undocumented)PL_laststatval(undocumented)PL_lex_state(undocumented)PL_lex_stuff(undocumented)PL_linestr(undocumented)PL_naPL_no_modify(undocumented)PL_parserPL_perldb(undocumented)PL_perl_destruct_levelPL_ppaddr(undocumented)PL_rsfp(undocumented)PL_rsfp_filters(undocumented)PL_signals(undocumented)PL_stack_base(undocumented)PL_stack_sp(undocumented)PL_statcache(undocumented)PL_stdingv(undocumented)PL_sv_arenaroot(undocumented)PL_sv_noPL_sv_undefPL_sv_yesPL_tainted(undocumented)PL_tainting(undocumented)PL_tokenbuf(undocumented)PL_Xpv(undocumented)
the Poison girls and the POP gang, we love a transition π
PoisonPoisonFreePoisonNewPoisonWithPOPiPOPlPOPnPOPpPOPspop_scope(undocumented)pregexecpregfree(undocumented)PRIVLIBPRIVLIB_EXPpTHXpTHX_PTR2IVPTR2natPTR2NVPTR2ulPTR2UVPTRV(undocumented)
PUSH it, push it real good π
PUSHiPUSHMARKPUSHmortalPUSHnPUSHpPUSHspush_scope(undocumented)PUSHuPUTBACKpv_displaypv_escapepv_pretty
Q and R, short and sweet, we love a breather π§
Quad_tRANDBITSRD_NODATARenewRenewcrepeatcpy(undocumented)REPLACEMENT_CHARACTER_UTF8RETVALrninstr
and now the S section, which is honestly the whole other half of this list, buckle up bestie π
the save/SAVE family first, because there are SO many:
Safefreesave_aptrsave_arySAVE_DEFSVSAVEDELETESAVEFREEPVSAVEFREESVsave_hashsave_hptrSAVEI32SAVEINTsave_itemSAVEIVsave_list(DEPRECATED)SAVELONGsave_nogv(DEPRECATED) (undocumented)SAVEPPTRsavepvsavepvnsave_scalarSAVESPTRsavestack_grow(undocumented)save_svrefSAVETMPS
scan, select, sig β say that three times fast π
scan_hexscan_octSelect_fd_set_tShmat_tSH_PATHSigjmp_bufSiglongjmpSignal_tSIG_NAMESIG_NUMSigsetjmp
the SITE/ST block, aka paths and stack pointers living their best life πΈ
SITEARCHSITEARCH_EXPSITELIBSITELIB_EXPSize_tSPSPAGAINSSize_tSTSTART_EXTERN_CSTARTPERLstart_subparse(undocumented)STDCHARSTMT_ENDSTMT_STARTstrEQstrGEstrGTSTRINGIFYstrLEstrLTstrNEstrnEQstrnNEStructCopySTR_WITH_LEN
okay now the sv_ and Sv portion, this is where it gets EXTREMELY long and I need you to trust me π₯
sv_2cvsv_2iosv_2mortalsv_2pvbyteSvAMAGIC_off(undocumented)SvAMAGIC_on(undocumented)sv_backoffsv_blesssv_catpvsv_catpv_mgsv_catpvnsv_catpvn_mgsv_catpvn_nomgsv_catpvssv_catsvsv_catsv_mgsv_catsv_nomgsv_chopsv_clearsv_cmpSV_CONST_RETURN(undocumented)SV_COW_DROP_PVSV_COW_SHARED_HASH_KEYS(undocumented)SvCURSvCUR_setsv_decsv_dumpSvENDsv_eqSVfSVfARGsv_freeSVf_UTF8SvGETMAGICsv_getsSV_GMAGICSvGROWSV_HAS_TRAILING_NULSV_IMMEDIATE_UNREFsv_incsv_insert
the IOK/NIOK flags, we're just vibing through the alphabet at this point π
SvIOKSvIOK_offSvIOK_onSvIOK_onlySvIOKpsv_isasv_isobjectSvIVSvIV_nomgSvIV_setSvIVXSvIVxsv_lenSvLENSvLEN_setsv_magicSvMAGIC_setsv_mortalcopysv_mortalcopy_flagsSV_MUTABLE_RETURN(undocumented)sv_newmortalSvNIOKSvNIOK_offSvNIOKp
the NOK block, plus one very special SV_NOSTEAL sitting there looking cute β¨
SvNOKSvNOK_offSvNOK_onSvNOK_onlySvNOKpSV_NOSTEALSvNVSvNV_nomgSvNV_setSvNVXSvNVxSvOKSvOOKSvOOK_off
POK o'clock, aka the string-flag portion, keep going, you're doing amazing π«Ά
SvPOKSvPOK_offSvPOK_onSvPOK_onlySvPOKp
and the big SvPV extended universe β yes there really are this many, no I'm not joking π
SvPVSvPVbyteSvPV_constSvPV_flagsSvPV_flags_constSvPV_flags_mutableSvPV_forceSvPV_force_flagsSvPV_force_flags_mutableSvPV_force_flags_nolenSvPV_force_mutableSvPV_force_nolenSvPV_force_nomgSvPV_force_nomg_nolenSvPV_mutablesv_pvn_force_flagsSvPV_nolenSvPV_nolen_constSvPV_nomgSvPV_nomg_constSvPV_nomg_const_nolenSvPV_nomg_nolenSvPV_renewSvPV_setSvPVXSvPVxSvPVX_constSvPVX_mutableSvPVx_nolen_constSvPVXx
and the last one standing in this part, the moment we've all been waiting for:
SvREADONLY
periodt. π
okay bestie, the compatibility list is still scrolling and it's giving β¨encyclopedicβ¨ β every single one of these is part of the flex, so here's the rest, no skips, no cap:
SvREADONLY_offSvREADONLY_onSvREFCNTSvREFCNT_decSvREFCNT_incSvREFCNT_inc_NNSvREFCNT_inc_simpleSvREFCNT_inc_simple_NNSvREFCNT_inc_simple_voidSvREFCNT_inc_simple_void_NNSvREFCNT_inc_voidSvREFCNT_inc_void_NNsv_reftypesv_replacesv_report_usedsv_resetSvROKSvROK_offSvROK_onSvRVSvRV_setSvRXSvRXOKsv_setivsv_setiv_mgSvSETMAGICsv_setnvsv_setnv_mgsv_setpvsv_setpv_mgsv_setpvnsv_setpvn_mgsv_setpvssv_setref_ivsv_setref_nvsv_setref_pvsv_setref_pvnsv_setsvSvSetSVsv_setsv_flagssv_setsv_mgsv_setsv_nomgsv_setuvsv_setuv_mgSvSHARED_HASHSV_SMAGICSvSTASHSvSTASH_setSVs_TEMPSvTAINTSVt_IVSVt_NULLSVt_NVSVt_PVSVt_PVAVSVt_PVCVSVt_PVFMSVt_PVGVSVt_PVHVSVt_PVIOSVt_PVIVSVt_PVLVSVt_PVMGSVt_PVNVSvTRUESvTRUE_nomgSvTRUExSvTYPEsvtype(undocumented)sv_unmagicsv_unmagicextsv_unrefsv_upgradeSvUPGRADEsv_usepvnsv_usepvn_mgSvUTF8SV_UTF8_NO_ENCODING(DEPRECATED)SvUVSvUV_nomgSvUV_setSvUVXSvUVxSvUVXx(DEPRECATED)SvVSTRING_mgswitch_to_global_localesync_localetaint_env(undocumented)taint_proper(undocumented)TARGTHISTime_ttoLOWERtoUPPERUid_tUINT16_CUINT32_CUINTMAX_CUNDERBARUNICODE_REPLACEMENTUNI_TO_NATIVEUNLIKELYunsharepvn(undocumented)USE_DYNAMIC_LOADINGUTF8fUTF8fARGUTF8_IS_INVARIANTUTF8_MAXBYTES_CASEU_VUVCHR_IS_INVARIANTUVCHR_SKIPUV_MAXUV_MINUVofUVSIZEUVTYPEUVufUVxfVAL_EAGAINVAL_O_NONBLOCKvload_modulevwarnWARN_ALLWARN_AMBIGUOUSWARN_ASSERTIONS(undocumented)WARN_BAREWORDWARN_CLOSEDWARN_CLOSUREWARN_DEBUGGINGWARN_DEPRECATEDWARN_DIGITWARN_EXECWARN_EXITINGWARN_GLOBWARN_INPLACEWARN_INTERNALWARN_IOWARN_LAYERWARN_MALLOCWARN_MISCWARN_NEWLINEWARN_NUMERICWARN_ONCEWARN_OVERFLOWWARN_PACKWARN_PARENTHESISWARN_PIPEWARN_PORTABLEWARN_PRECEDENCEWARN_PRINTFWARN_PROTOTYPEWARN_QWWARN_RECURSIONWARN_REDEFINEWARN_REGEXPWARN_RESERVEDWARN_SEMICOLONWARN_SEVEREWARN_SIGNALWARN_SUBSTRwarn_svWARN_SYNTAXWARN_TAINTWARN_THREADSWARN_UNINITIALIZEDWARN_UNOPENEDWARN_UNPACKWARN_UNTIEWARN_UTF8WARN_VOIDwhichsigWIDEST_UTYPE(undocumented)XCPT_CATCHXCPT_RETHROWXCPT_TRY_ENDXCPT_TRY_STARTXPUSHiXPUSHmortalXPUSHnXPUSHpXPUSHsXPUSHuXS(undocumented)XSprePUSH(undocumented)XSPROTO(undocumented)XSRETURNXSRETURN_EMPTYXSRETURN_IVXSRETURN_NOXSRETURN_NVXSRETURN_PVXSRETURN_UNDEFXSRETURN_UVXSRETURN_YESXST_mIVXST_mNOXST_mNVXST_mPVXST_mUNDEFXST_mUVXST_mYESXS_VERSIONXS_VERSION_BOOTCHECKZeroZeroD
and now the lil bonus pile, bestie β these ones live under the βwe don't know which version backported themβ energy π§:
π§ Backported version unknown π§
LC_NUMERIC_LOCK(undocumented)LC_NUMERIC_UNLOCK(undocumented)LOCK_NUMERIC_STANDARD(undocumented)NUM2PTR(undocumented)PERLIO_FUNCS_CAST(undocumented)PERLIO_FUNCS_DECL(undocumented)STORE_LC_NUMERIC_SET_STANDARD(undocumented)STORE_NUMERIC_SET_STANDARD(undocumented)SvPV_flags_const_nolen(undocumented)UNLOCK_NUMERIC_STANDARD(undocumented)XSPROTO(undocumented)
π BUGS π
If you find any bugs, if Devel::PPPort doesn't seem to build on your system, or if any of its tests fail β bestie, please send a bug report to <https://github.com/Dual-Life/Devel-PPPort/issues/new> π«Ά
π AUTHORS π
- Version 1.x of
Devel::PPPortwas 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 by perl5 porters
π COPYRIGHT π
- Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz.
- Copyright (C) 2018-2020, 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.
and that's the page, bestie π«Ά this whole manual is perl v5.42.0, dated 2022-03-19, and yes ma'am it's PPPort(3) β iconic, no cap π
β¨
π¦ where this page comes from
- opensuse-leap 16.0: perl-Devel-PPPort 3.68-bp160.1.12 Β· Artistic-1.0 OR GPL-1.0-or-later
- opensuse-leap 16.0: perl-Devel-PPPort 3.68-bp160.1.12 Β· Artistic-1.0 OR GPL-1.0-or-later
- opensuse-leap 16.0: perl-Devel-PPPort 3.68-bp160.1.12 Β· Artistic-1.0 OR GPL-1.0-or-later
- opensuse-leap 16.0: perl-Devel-PPPort 3.68-bp160.1.12 Β· Artistic-1.0 OR GPL-1.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms