PPPort(3)

πŸ“¦ version 3.68, in opensuse-leap 16.0

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_CXT
  • aMY_CXT
  • aMY_CXT_
  • __ASSERT_
  • ASSUME
  • aTHX
  • aTHX_
  • aTHXR
  • aTHXR_
  • av_count
  • AvFILLp
  • av_tindex
  • av_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_UTF8
  • boolSV
  • call_argv
  • caller_cx
  • call_method
  • call_pv
  • call_sv
  • C_ARRAY_END
  • C_ARRAY_LENGTH
  • cBOOL
  • ckWARN
  • ckWARN2
  • ckWARN2_d
  • ckWARN3
  • ckWARN3_d
  • ckWARN4
  • ckWARN4_d
  • ckWARN_d
  • ck_warner
  • ck_warner_d
  • CopFILE
  • CopFILEAV
  • CopFILEGV
  • CopFILEGV_set
  • CopFILE_set
  • CopFILESV
  • CopSTASH
  • CopSTASH_eq
  • CopSTASHPV
  • CopSTASHPV_set
  • CopSTASH_set
  • CopyD
  • CPERLscope
  • croak_memory_wrap
  • croak_nocontext
  • croak_no_modify
  • croak_sv
  • croak_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 πŸ¦‹

  • dAX
  • dAXMARK
  • DECLARATION_FOR_LC_NUMERIC_MANIPULATION
  • 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

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_utf8
  • get_av
  • get_cv
  • get_cvn_flags
  • get_cvs
  • get_hv
  • get_sv
  • G_METHOD
  • G_RETHROW
  • grok_bin
  • grok_hex
  • grok_number
  • GROK_NUMERIC_RADIX
  • grok_numeric_radix
  • grok_oct
  • gv_fetchpvn_flags
  • gv_fetchpvs
  • gv_fetchsv
  • gv_init_pvn
  • gv_stashpvn
  • gv_stashpvs
  • GvSVn

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_SVKEY
  • HeUTF8
  • hv_fetchs
  • HvNAME_get
  • HvNAMELEN_get
  • hv_stores
  • IN_LOCALE
  • IN_LOCALE_COMPILETIME
  • IN_LOCALE_RUNTIME
  • IN_PERL_COMPILETIME
  • INT2PTR

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:

  • isALNUM
  • isALNUM_A
  • isALNUMC
  • isALNUMC_A
  • isALNUMC_L1
  • isALPHA
  • isALPHA_A
  • isALPHA_L1
  • isALPHA_LC_utf8_safe
  • isALPHANUMERIC
  • isALPHANUMERIC_A
  • isALPHANUMERIC_L1
  • isALPHANUMERIC_LC
  • isALPHANUMERIC_LC_utf8_safe
  • isALPHANUMERIC_utf8_safe
  • isALPHANUMERIC_uvchr
  • isALPHA_utf8_safe
  • isALPHA_uvchr
  • isASCII
  • isASCII_A
  • isASCII_L1
  • isASCII_LC
  • isASCII_utf8_safe
  • isASCII_uvchr
  • isBLANK
  • isBLANK_A
  • isBLANK_L1
  • isBLANK_LC
  • isBLANK_LC_utf8_safe
  • isBLANK_utf8_safe
  • isBLANK_uvchr
  • isCNTRL
  • isCNTRL_A
  • isCNTRL_L1
  • isCNTRL_LC_utf8_safe
  • isCNTRL_utf8_safe
  • isCNTRL_uvchr
  • isDIGIT
  • isDIGIT_A
  • isDIGIT_L1
  • isDIGIT_LC_utf8_safe
  • isDIGIT_utf8_safe
  • isDIGIT_uvchr
  • isGRAPH
  • isGRAPH_A
  • isGRAPH_L1
  • isGRAPH_LC_utf8_safe
  • isGRAPH_utf8_safe
  • isGRAPH_uvchr
  • isGV_with_GP
  • isIDCONT
  • isIDCONT_A
  • isIDCONT_L1
  • isIDCONT_LC
  • isIDCONT_LC_utf8_safe
  • isIDCONT_utf8_safe
  • isIDCONT_uvchr
  • isIDFIRST
  • isIDFIRST_A
  • isIDFIRST_L1
  • isIDFIRST_LC
  • isIDFIRST_LC_utf8_safe
  • isIDFIRST_utf8_safe
  • isIDFIRST_uvchr
  • is_invariant_string
  • isLOWER
  • isLOWER_A
  • isLOWER_L1
  • isLOWER_LC_utf8_safe
  • isLOWER_utf8_safe
  • isLOWER_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_MAX
  • IS_NUMBER_INFINITY
  • IS_NUMBER_IN_UV
  • IS_NUMBER_NAN
  • IS_NUMBER_NEG
  • IS_NUMBER_NOT_INT
  • isOCTAL
  • isOCTAL_A
  • isOCTAL_L1
  • isPRINT
  • isPRINT_A
  • isPRINT_L1
  • isPRINT_LC_utf8_safe
  • isPRINT_utf8_safe
  • isPRINT_uvchr
  • isPSXSPC
  • isPSXSPC_A
  • isPSXSPC_L1
  • isPSXSPC_LC_utf8_safe
  • isPSXSPC_utf8_safe
  • isPSXSPC_uvchr
  • isPUNCT
  • isPUNCT_A
  • isPUNCT_L1
  • isPUNCT_LC_utf8_safe
  • isPUNCT_utf8_safe
  • isPUNCT_uvchr
  • isSPACE
  • isSPACE_A
  • isSPACE_L1
  • isSPACE_LC_utf8_safe
  • isSPACE_utf8_safe
  • isSPACE_uvchr
  • isUPPER
  • isUPPER_A
  • isUPPER_L1
  • isUPPER_LC_utf8_safe
  • isUPPER_utf8_safe
  • isUPPER_uvchr
  • isUTF8_CHAR
  • is_utf8_invariant_string
  • isWORDCHAR
  • isWORDCHAR_A
  • isWORDCHAR_L1
  • isWORDCHAR_LC
  • isWORDCHAR_LC_utf8_safe
  • isWORDCHAR_utf8_safe
  • isWORDCHAR_uvchr
  • isXDIGIT
  • isXDIGIT_A
  • isXDIGIT_L1
  • isXDIGIT_LC
  • isXDIGIT_LC_utf8_safe
  • isXDIGIT_utf8_safe
  • isXDIGIT_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 πŸ‘‘

  • IVdf
  • IVSIZE
  • IVTYPE
  • LATIN1_TO_NATIVE
  • LC_NUMERIC_LOCK
  • LC_NUMERIC_UNLOCK
  • LIKELY
  • load_module
  • LOCK_LC_NUMERIC_STANDARD
  • LOCK_NUMERIC_STANDARD
  • memCHRs
  • memEQ
  • memEQs
  • memNE
  • memNEs
  • mess
  • mess_nocontext
  • mess_sv
  • mg_findext
  • MoveD
  • mPUSHi
  • mPUSHn
  • mPUSHp
  • mPUSHs
  • mPUSHu
  • MUTABLE_AV
  • MUTABLE_CV
  • MUTABLE_GV
  • MUTABLE_HV
  • MUTABLE_IO
  • 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

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_LATIN1
  • NATIVE_TO_UNI
  • newCONSTSUB
  • newRV_inc
  • newRV_noinc
  • newSVpvn
  • newSVpvn_flags
  • newSVpvn_share
  • newSVpvn_utf8
  • newSVpvs
  • newSVpvs_flags
  • newSVpvs_share
  • newSVsv_flags
  • newSVsv_nomg
  • newSV_type
  • newSVuv
  • Newx
  • Newxc
  • Newxz
  • NOOP
  • NOT_REACHED
  • NUM2PTR
  • NVef
  • NVff
  • NVgf
  • NVTYPE
  • OpHAS_SIBLING
  • OpLASTSIB_set
  • OpMAYBESIB_set
  • OpMORESIB_set
  • OpSIBLING
  • packWARN
  • packWARN2
  • packWARN3
  • packWARN4

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_ABS
  • PERL_ARGS_ASSERT_CROAK_XS_USAGE
  • Perl_ck_warner
  • Perl_ck_warner_d
  • Perl_croak_no_modify
  • PERL_HASH
  • PERL_INT_MAX
  • PERL_INT_MIN
  • PERLIO_FUNCS_CAST
  • PERLIO_FUNCS_DECL
  • PERL_LONG_MAX
  • PERL_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_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

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_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_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_STATIC_INLINE
  • 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_EQ
  • PERL_VERSION_GE
  • PERL_VERSION_GT
  • PERL_VERSION_LE
  • PERL_VERSION_LT
  • PERL_VERSION_NE
  • Perl_warner
  • Perl_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_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_mess_sv
  • PL_na
  • PL_no_modify
  • PL_parser
  • PL_perldb
  • PL_perl_destruct_level
  • 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
  • PL_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_CXT
  • pMY_CXT
  • pMY_CXT_
  • Poison
  • PoisonFree
  • PoisonNew
  • PoisonWith
  • pTHX
  • pTHX_
  • PTR2IV
  • PTR2nat
  • PTR2NV
  • PTR2ul
  • PTR2UV
  • PTRV
  • PUSHmortal
  • PUSHu
  • pv_display
  • pv_escape
  • pv_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_UTF8
  • RESTORE_LC_NUMERIC
  • SAVE_DEFSV
  • START_EXTERN_C
  • START_MY_CXT
  • start_subparse
  • STMT_END
  • STMT_START
  • STORE_LC_NUMERIC_SET_STANDARD
  • STORE_NUMERIC_SET_STANDARD
  • STR_WITH_LEN
  • sv_2pvbyte
  • sv_2pvbyte_nolen
  • sv_2pv_flags
  • sv_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_2uv
  • sv_catpvf_mg
  • sv_catpvf_mg_nocontext
  • sv_catpv_mg
  • 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
  • SVf
  • SVfARG
  • SVf_UTF8
  • SvGETMAGIC
  • SV_GMAGIC
  • SV_HAS_TRAILING_NUL
  • SV_IMMEDIATE_UNREF
  • SvIV_nomg
  • sv_len_utf8
  • sv_len_utf8_nomg
  • sv_magic_portable
  • SvMAGIC_set
  • sv_mortalcopy_flags
  • SV_MUTABLE_RETURN
  • SV_NOSTEAL
  • SvNV_nomg
  • SvPVbyte
  • SvPVCLEAR
  • 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
  • sv_pvn_force_flags
  • sv_pvn_nomg
  • SvPV_nolen
  • SvPV_nolen_const
  • SvPV_nomg
  • SvPV_nomg_const
  • SvPV_nomg_const_nolen
  • SvPV_nomg_nolen
  • SvPV_renew
  • SvPVX_const
  • SvPVX_mutable
  • SvPVx_nolen_const
  • 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
  • sv_setiv_mg
  • sv_setnv_mg
  • sv_setpvf_mg
  • sv_setpvf_mg_nocontext
  • sv_setpv_mg
  • sv_setpvn_mg
  • sv_setpvs
  • sv_setsv_flags
  • sv_setsv_mg
  • sv_setsv_nomg
  • sv_setuv
  • sv_setuv_mg
  • SvSHARED_HASH
  • SV_SMAGIC
  • SvSTASH_set
  • SvTRUE_nomg
  • sv_unmagicext
  • SvUOK
  • sv_usepvn_mg
  • SvUTF8
  • SV_UTF8_NO_ENCODING
  • sv_uv
  • SvUV
  • SvUV_nomg
  • SvUV_set
  • SvUVX
  • SvUVx
  • SvUVXx
  • sv_vcatpvf
  • sv_vcatpvf_mg
  • sv_vsetpvf
  • sv_vsetpvf_mg
  • SvVSTRING_mg
  • switch_to_global_locale
  • sync_locale
  • toFOLD_utf8_safe
  • toFOLD_uvchr
  • toLOWER_utf8_safe
  • toLOWER_uvchr
  • toTITLE_utf8_safe
  • toTITLE_uvchr
  • toUPPER_utf8_safe
  • toUPPER_uvchr
  • UNDERBAR
  • UNICODE_REPLACEMENT
  • UNI_TO_NATIVE
  • UNLIKELY
  • UNLOCK_LC_NUMERIC_STANDARD
  • UNLOCK_NUMERIC_STANDARD
  • UTF8_CHK_SKIP
  • UTF8f
  • UTF8fARG
  • UTF8_IS_INVARIANT
  • UTF8_MAXBYTES
  • UTF8_MAXBYTES_CASE
  • UTF8_SAFE_SKIP
  • UTF8_SKIP
  • utf8_to_uvchr
  • utf8_to_uvchr_buf
  • UVCHR_IS_INVARIANT
  • UVCHR_SKIP
  • UVof
  • UVSIZE
  • UVTYPE
  • UVuf
  • UVXf
  • UVxf
  • vload_module
  • vmess
  • vnewSVpvf
  • vwarner
  • WARN_ALL
  • WARN_AMBIGUOUS
  • WARN_ASSERTIONS
  • WARN_BAREWORD
  • WARN_CLOSED
  • WARN_CLOSURE
  • WARN_DEBUGGING
  • WARN_DEPRECATED
  • WARN_DIGIT
  • warner
  • 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
  • WIDEST_UTYPE
  • XCPT_CATCH
  • XCPT_RETHROW
  • XCPT_TRY_END
  • XCPT_TRY_START
  • XPUSHmortal
  • XPUSHu
  • XSprePUSH
  • XSPROTO
  • XSRETURN
  • XSRETURN_UV
  • XST_mUV
  • ZeroD

🌈 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_ZERO
  • PERL_INC_VERSION_LIST
  • sv_numeq
  • sv_numeq_flags
  • sv_streq
  • sv_streq_flags
  • USE_C_BACKTRACE
  • WARN_EXPERIMENTAL__ARGS_ARRAY_WITH_SIGNATURES
  • WARN_EXPERIMENTAL__BUILTIN

perl 5.35.8

  • op_wrap_finally (marked experimental)

perl 5.35.7

  • phase_name

perl 5.35.6

  • CopFILEAVn
  • sv_setpvn_fresh

perl 5.35.5

  • SAVESTRLEN
  • WARN_EXPERIMENTAL__FOR_LIST

perl 5.35.4

  • newDEFEROP (marked experimental)
  • PERL_THREAD_LOCAL
  • ST_DEV_SIGN
  • ST_DEV_SIZE
  • SvIsBOOL
  • sv_setbool
  • sv_setbool_mg
  • sv_setrv_inc
  • sv_setrv_inc_mg
  • sv_setrv_noinc
  • sv_setrv_noinc_mg
  • WARN_EXPERIMENTAL__DEFER

perl 5.35.1

  • av_new_alloc
  • HAS_FFS
  • HAS_FFSL
  • HAS_NL_LANGINFO_L
  • HAS_NON_INT_BITFIELDS
  • HAS_STRXFRM_L
  • newAV_alloc_x
  • newAV_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_pv
  • cop_hints_exists_pvn
  • cop_hints_exists_pvs
  • cop_hints_exists_sv

perl 5.33.7

  • newTRYCATCHOP (marked experimental)
  • WARN_EXPERIMENTAL__TRY

perl 5.33.5

  • GETENV_PRESERVES_OTHER_THREAD
  • pad_compname_type (DEPRECATED)

perl 5.33.2

  • pack_cat (DEPRECATED)

perl 5.32.1

  • GDBMNDBM_H_USES_PROTOTYPES
  • HAS_DBMINIT_PROTO
  • HAS_SOCKADDR_STORAGE
  • I_DBM
  • I_NDBM
  • NDBM_H_USES_PROTOTYPES

perl 5.31.9

  • UNI_DISPLAY_BACKSPACE

perl 5.31.7

  • HASATTRIBUTE_ALWAYS_INLINE
  • HAS_ISLESS
  • HAS_WCRTOMB
  • sv_isa_sv (marked experimental)
  • WARN_EXPERIMENTAL__ISA

perl 5.31.5

  • isALPHANUMERIC_utf8
  • isALPHA_utf8
  • isASCII_utf8
  • isBLANK_utf8
  • isCNTRL_utf8
  • isDIGIT_utf8
  • isGRAPH_utf8
  • isIDCONT_utf8
  • isIDFIRST_utf8
  • isLOWER_utf8
  • isPRINT_utf8
  • isPSXSPC_utf8
  • isPUNCT_utf8
  • isSPACE_utf8
  • isUPPER_utf8
  • isWORDCHAR_utf8
  • isXDIGIT_utf8
  • toFOLD_utf8
  • toLOWER_utf8
  • toTITLE_utf8
  • toUPPER_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_nomg
  • SvPVbyte_or_null
  • SvPVbyte_or_null_nomg
  • SvPVutf8_nomg
  • SvPVutf8_or_null
  • SvPVutf8_or_null_nomg
  • sv_utf8_downgrade_flags
  • sv_utf8_downgrade_nomg

perl 5.31.3

  • parse_subsignature (marked experimental)
  • SANE_ERRSV
  • STORE_LC_NUMERIC_SET_TO_NEEDED_IN
  • WITH_LC_NUMERIC_SET_TO_NEEDED
  • WITH_LC_NUMERIC_SET_TO_NEEDED_IN

perl 5.29.10

  • my_strtod
  • Strtod

perl 5.29.9

  • HAS_TOWLOWER
  • HAS_TOWUPPER
  • I_WCTYPE
  • WARN_EXPERIMENTAL__PRIVATE_USE
  • WARN_EXPERIMENTAL__UNIPROP_WILDCARDS
  • WARN_EXPERIMENTAL__VLB

perl 5.27.11

  • HAS_DUPLOCALE
  • HAS_STRTOD_L

perl 5.27.9

  • PERL_MAGIC_nonelem
  • thread_locale_init (marked experimental) (undocumented)
  • thread_locale_term (marked experimental) (undocumented)
  • utf8n_to_uvchr_msgs
  • uvchr_to_utf8_flags_msgs
  • WARN_EXPERIMENTAL__ALPHA_ASSERTIONS

perl 5.27.8

  • HAS_ACCEPT4
  • HAS_DUP3
  • HAS_MKOSTEMP
  • HAS_PIPE2
  • newWHENOP
  • WARN_EXPERIMENTAL__SCRIPT_RUN

perl 5.27.7

  • WARN_SHADOW

perl 5.27.6

  • HAS_MBRLEN
  • HAS_MBRTOWC
  • HAS_NANOSLEEP
  • HAS_STRNLEN
  • HAS_STRTOLD_L
  • HAS_THREAD_SAFE_NL_LANGINFO_L
  • I_WCHAR
  • wrap_keyword_plugin (marked experimental)

perl 5.27.5

  • HAS_MEMRCHR

perl 5.27.4

  • HAS_FCHMODAT
  • HAS_LINKAT
  • HAS_OPENAT
  • HAS_RENAMEAT
  • HAS_UNLINKAT
  • mg_freeext
  • Perl_langinfo
  • sv_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_flags
  • PL_sv_zero
  • sv_string_from_errnum

perl 5.27.2

  • Perl_setlocale
  • UNICODE_DISALLOW_PERL_EXTENDED
  • UNICODE_WARN_PERL_EXTENDED
  • UTF8_DISALLOW_PERL_EXTENDED
  • UTF8_GOT_PERL_EXTENDED
  • UTF8_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_ERRSV
  • DOUBLE_HAS_NEGATIVE_ZERO
  • DOUBLE_HAS_SUBNORMALS
  • DOUBLE_STYLE_IEEE
  • LONG_DOUBLE_STYLE_IEEE
  • LONG_DOUBLE_STYLE_IEEE_EXTENDED
  • utf8_hop_back
  • utf8_hop_forward
  • utf8_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_BIT
  • DOUBLE_IS_IBM_DOUBLE_64_BIT
  • DOUBLE_IS_IBM_SINGLE_32_BIT
  • is_c9strict_utf8_string
  • is_c9strict_utf8_string_loc
  • is_c9strict_utf8_string_loclen
  • is_strict_utf8_string
  • is_strict_utf8_string_loc
  • is_strict_utf8_string_loclen
  • is_utf8_fixed_width_buf_flags
  • is_utf8_fixed_width_buf_loc_flags
  • is_utf8_fixed_width_buf_loclen_flags
  • is_utf8_string_flags
  • is_utf8_string_loc_flags
  • is_utf8_string_loclen_flags
  • SvPVCLEAR
  • sv_setpv_bufsize
  • UTF8_GOT_CONTINUATION
  • UTF8_GOT_EMPTY
  • UTF8_GOT_LONG
  • UTF8_GOT_NONCHAR
  • UTF8_GOT_NON_CONTINUATION
  • UTF8_GOT_OVERFLOW
  • UTF8_GOT_SHORT
  • UTF8_GOT_SUPER
  • UTF8_GOT_SURROGATE
  • utf8n_to_uvchr_error

perl 5.25.5

  • isC9_STRICT_UTF8_CHAR
  • isSTRICT_UTF8_CHAR
  • isUTF8_CHAR_flags
  • is_utf8_valid_partial_char
  • is_utf8_valid_partial_char_flags
  • UNICODE_DISALLOW_ILLEGAL_C9_INTERCHANGE
  • UNICODE_WARN_ILLEGAL_C9_INTERCHANGE
  • UTF8_DISALLOW_ILLEGAL_C9_INTERCHANGE
  • UTF8_WARN_ILLEGAL_C9_INTERCHANGE

perl 5.25.4

  • HAS_GAI_STRERROR
  • I_XLOCALE
  • LONG_DOUBLE_IS_VAX_H_FLOAT

perl 5.25.3

  • DOUBLE_HAS_INF
  • DOUBLE_HAS_NAN
  • DOUBLE_IS_VAX_D_FLOAT
  • DOUBLE_IS_VAX_F_FLOAT
  • DOUBLE_IS_VAX_G_FLOAT
  • hv_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_FREELOCALE
  • HAS_NEWLOCALE
  • HAS_USELOCALE

perl 5.23.8

spot the ones with a little asterisk of chaos, bestie πŸ‘€
  • clear_defarray (undocumented)
  • HAS_SIGINFO_SI_ADDR
  • HAS_SIGINFO_SI_BAND
  • HAS_SIGINFO_SI_ERRNO
  • HAS_SIGINFO_SI_PID
  • HAS_SIGINFO_SI_STATUS
  • HAS_SIGINFO_SI_UID
  • HAS_SIGINFO_SI_VALUE
  • leave_adjust_stacks (marked experimental) (undocumented)
  • Perl_savetmps (undocumented)

perl 5.23.6

  • LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_BE
  • LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_LE
  • LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_BE
  • LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_LE
  • UNICODE_DISALLOW_ABOVE_31_BIT
  • UNICODE_WARN_ABOVE_31_BIT

perl 5.23.5

filesystem-vibes era fr fr 🧚
  • HAS_FSTATFS
  • HAS_FSTATVFS
  • HAS_GETMNTENT
  • HAS_HASMNTOPT
  • HAS_STRUCT_STATFS
  • HAS_STRUCT_STATFS_F_FLAGS
  • HAS_USTAT
  • I_MNTENT
  • I_SYS_MOUNT
  • I_SYS_STATFS
  • I_SYS_STATVFS
  • I_SYS_VFS
  • I_USTAT
  • sv_ref

perl 5.23.2

  • INT64_C
  • UINT64_C
  • UTF8_IS_NONCHAR
  • UTF8_IS_SUPER
  • UTF8_IS_SURROGATE

perl 5.23.0

  • DOUBLEINFBYTES
  • DOUBLEMANTBITS
  • DOUBLENANBYTES
  • LONGDBLINFBYTES
  • LONGDBLMANTBITS
  • LONGDBLNANBYTES
  • NVMANTBITS

perl 5.21.10

  • DECLARATION_FOR_LC_NUMERIC_MANIPULATION
  • RESTORE_LC_NUMERIC
  • STORE_LC_NUMERIC_FORCE_TO_UNDERLYING
  • STORE_LC_NUMERIC_SET_TO_NEEDED

perl 5.21.9

  • HAS_LLRINTL
  • HAS_LLROUNDL
  • HAS_LRINTL
  • HAS_LROUNDL
  • WARN_EXPERIMENTAL__BITWISE

perl 5.21.8

  • sv_get_backrefs (marked experimental)
  • WARN_EXPERIMENTAL__CONST_ATTR
  • WARN_EXPERIMENTAL__RE_STRICT

perl 5.21.7

  • HAS_REGCOMP
  • HAS_STAT
  • I_GDBM
  • I_GDBMNDBM
  • newPADNAMELIST (marked experimental)
  • newPADNAMEouter (marked experimental)
  • newPADNAMEpvn (marked experimental)
  • newUNOP_AUX
  • padnamelist_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_end
  • block_start
  • DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN
  • DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIAN
  • DOUBLE_IS_IEEE_754_32_BIT_BIG_ENDIAN
  • DOUBLE_IS_IEEE_754_32_BIT_LITTLE_ENDIAN
  • DOUBLE_IS_IEEE_754_64_BIT_BIG_ENDIAN
  • DOUBLE_IS_IEEE_754_64_BIT_LITTLE_ENDIAN
  • DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_BE_LE
  • DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_LE_BE
  • DOUBLE_IS_UNKNOWN_FORMAT
  • DOUBLEKIND
  • HAS_ASINH
  • HAS_ATANH
  • HAS_CBRT
  • HAS_COPYSIGN
  • HAS_ERF
  • HAS_ERFC
  • HAS_EXP2
  • HAS_EXPM1
  • HAS_FDIM
  • HAS_FMA
  • HAS_FMAX
  • HAS_FMIN
  • HAS_HYPOT
  • HAS_ILOGB
  • HAS_ISNORMAL
  • HAS_LGAMMA
  • HAS_LGAMMA_R
  • HAS_LLRINT
  • HAS_LLROUND
  • HAS_LOG1P
  • HAS_LOG2
  • HAS_LOGB
  • HAS_LRINT
  • HAS_LROUND
  • HAS_NAN
  • HAS_NEARBYINT
  • HAS_NEXTAFTER
  • HAS_NEXTTOWARD
  • HAS_REMAINDER
  • HAS_REMQUO
  • HAS_RINT
  • HAS_ROUND
  • HAS_SCALBN
  • HAS_TGAMMA
  • HAS_TRUNC
  • intro_my
  • newDEFSVOP
  • op_convert_list
  • WARN_LOCALE

perl 5.21.5

  • cv_name
  • CV_NAME_NOTQUAL
  • HAS_LC_MONETARY_2008
  • newMETHOP
  • newMETHOP_named
  • PERL_MAGIC_debugvar
  • PERL_MAGIC_lvref
  • SV_CATBYTES
  • SV_CATUTF8
  • WARN_EXPERIMENTAL__REFALIASING

perl 5.21.4

  • CALL_CHECKER_REQUIRE_GV
  • cv_set_call_checker_flags
  • grok_infnan
  • HAS_ACOSH
  • HAS_FEGETROUND
  • HAS_FPCLASSIFY
  • HAS_ISFINITE
  • HAS_ISINFL
  • HAS_J0
  • HAS_J0L
  • HAS_TRUNCL
  • I_FENV
  • isinfnan
  • I_STDINT
  • Perl_acos
  • Perl_asin
  • Perl_atan
  • Perl_cosh
  • Perl_log10
  • Perl_sinh
  • Perl_tan
  • Perl_tanh

perl 5.21.3

  • HAS_LDEXPL
  • LONG_DOUBLE_IS_DOUBLE
  • LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BIG_ENDIAN
  • LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LITTLE_ENDIAN
  • LONG_DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN
  • LONG_DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIAN
  • LONG_DOUBLE_IS_UNKNOWN_FORMAT
  • LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN
  • LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN
  • LONG_DOUBLEKIND
  • Perl_ldexp

perl 5.21.2

  • grok_number_flags
  • op_sibling_splice
  • PERL_SCAN_TRAILING
  • WARN_MISSING
  • WARN_REDUNDANT

perl 5.21.1

  • HAS_BACKTRACE
  • HAS_DLADDR
  • HAS_PTRDIFF_T
  • HAS_WCSCMP
  • HAS_WCSXFRM
  • I_EXECINFO
  • markstack_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_SYSCALL
  • is_safe_syscall
  • WARN_SYSCALLS

perl 5.19.3

  • PERL_EXIT_ABORT
  • PERL_EXIT_WARN
  • sv_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 πŸ’…
  • toFOLD
  • toFOLD_A
  • toLOWER_A
  • toLOWER_L1
  • toTITLE
  • toTITLE_A
  • toUPPER_A

perl 5.18.0

  • hv_rand_set (undocumented)

perl 5.17.11

  • WARN_EXPERIMENTAL__SMARTMATCH

perl 5.17.8

  • isALPHANUMERIC_LC_uvchr
  • isIDCONT_LC_uvchr
  • WARN_EXPERIMENTAL__REGEX_SETS

perl 5.17.7

  • isALNUMC_LC_uvchr
  • isASCII_LC_uvchr
  • isBLANK_LC_uvchr
  • isPSXSPC_LC_uvchr
  • isWORDCHAR_LC_uvchr
  • isXDIGIT_LC_uvchr
  • SvREFCNT_dec_NN
  • SvTRUE_NN
  • SvTRUE_nomg_NN

perl 5.17.6

  • READ_XDIGIT

perl 5.17.5

  • WARN_EXPERIMENTAL__LEXICAL_SUBS

perl 5.17.4

  • GV_SUPER
  • HAS_IP_MREQ_SOURCE
  • newMYSUB (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_MREQ
  • PERL_RELOCATABLE_INC
  • sv_copypv_flags
  • sv_copypv_nomg
  • sv_vcatpvfn_flags

perl 5.17.1

  • alloccopstash (marked experimental)
  • CopSTASHPV_set

perl 5.16.0

  • CopLABEL_len
  • CopLABEL_len_flags

perl 5.15.8

  • HAS_IPV6_MREQ
  • HAS_SOCKADDR_IN6
  • is_utf8_char_buf
  • wrap_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_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
  • HvENAMELEN
  • HvENAMEUTF8
  • HvNAMELEN
  • HvNAMEUTF8
  • newGVgen_flags (undocumented)
  • sv_derived_from_pv
  • sv_derived_from_pvn
  • sv_derived_from_sv
  • sv_does_pv
  • sv_does_pvn
  • sv_does_sv
  • whichsig_pv
  • whichsig_pvn
  • whichsig_sv

πŸ’… perl 5.15.3

  • GV_ADDMG
  • gv_fetchsv_nomg
  • GV_NO_SVGMAGIC
  • I_STDBOOL
  • QUAD_IS___INT64

πŸŽ€ perl 5.15.2

  • ST_INO_SIGN
  • ST_INO_SIZE
  • XS_EXTERNAL (undocumented)
  • XS_INTERNAL (undocumented)

✨ perl 5.15.1

the pad era, we love to see it 🧚

  • cv_clone
  • pad_add_anon
  • pad_add_name_pv
  • pad_add_name_pvn
  • pad_add_name_pvs
  • pad_add_name_sv
  • pad_alloc (marked experimental)
  • pad_findmy_pv
  • pad_findmy_pvn
  • pad_findmy_pvs
  • pad_findmy_sv
  • pad_new
  • pad_tidy (marked experimental)

🌸 perl 5.13.10

  • WARN_NONCHAR
  • WARN_NON_UNICODE
  • WARN_SURROGATE

πŸ’œ perl 5.13.9

unicode girlies rise πŸ¦‹ look at all these UNICODE_ and UTF8_ twins β€” yes, both sets, every one:

  • HAS_SIN6_SCOPE_ID
  • PERL_PV_ESCAPE_NONASCII
  • UNICODE_DISALLOW_ILLEGAL_INTERCHANGE
  • UNICODE_DISALLOW_NONCHAR
  • UNICODE_DISALLOW_SUPER
  • UNICODE_DISALLOW_SURROGATE
  • UNICODE_IS_NONCHAR
  • UNICODE_IS_SUPER
  • UNICODE_WARN_ILLEGAL_INTERCHANGE
  • UNICODE_WARN_NONCHAR
  • UNICODE_WARN_SUPER
  • UNICODE_WARN_SURROGATE
  • UTF8_DISALLOW_ILLEGAL_INTERCHANGE
  • UTF8_DISALLOW_NONCHAR
  • UTF8_DISALLOW_SUPER
  • UTF8_DISALLOW_SURROGATE
  • UTF8_WARN_ILLEGAL_INTERCHANGE
  • UTF8_WARN_NONCHAR
  • UTF8_WARN_SUPER
  • UTF8_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_utf8
  • cophh_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_UTF8
  • cophh_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_2hv
  • cop_hints_fetch_pv
  • cop_hints_fetch_pvn
  • cop_hints_fetch_pvs
  • cop_hints_fetch_sv
  • dirp_dup (undocumented)
  • HvENAME
  • lex_start (marked experimental)
  • newFOROP
  • newWHILEOP
  • OP_CLASS
  • op_lvalue (marked experimental)
  • op_scope (marked experimental)
  • parse_barestmt (marked experimental)
  • parse_block (marked experimental)
  • parse_label (marked experimental)
  • PARSE_OPTIONAL
  • Perl_custom_op_register (undocumented)
  • PL_phase
  • XopDISABLE
  • XopENABLE
  • XopENTRY
  • XopENTRYCUSTOM
  • XopENTRY_set
  • XopFLAGS

🧚 perl 5.13.6

call-checker central πŸ’…

  • ck_entersub_args_list
  • ck_entersub_args_proto
  • ck_entersub_args_proto_or_list
  • cv_get_call_checker
  • cv_set_call_checker
  • gv_fetchpvn
  • lex_stuff_pv (marked experimental)
  • LINKLIST
  • load_module_nocontext
  • mg_free_type
  • newSVpv_share
  • op_append_elem
  • op_append_list
  • op_contextualize
  • op_linklist
  • op_prepend_elem
  • parse_stmtseq (marked experimental)
  • PERL_MAGIC_checkcall
  • rv2cv_op_cv
  • RV2CVOPCV_MARK_EARLY
  • RV2CVOPCV_RETURN_NAME_GV
  • save_pushi32ptr (undocumented)
  • save_pushptrptr (undocumented)
  • savesharedpvs
  • savesharedsvpv
  • 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
  • sv_setref_pvs

πŸŽ€ perl 5.13.5

  • hv_copy_hints_hv
  • lex_stuff_pvs (marked experimental)
  • parse_fullstmt (marked experimental)
  • PL_rpeepp
  • save_hints (undocumented)

⭐ perl 5.13.4

  • HAS_STATIC_INLINE
  • PERL_STATIC_INLINE
  • XS_APIVERSION_BOOTCHECK

πŸ¦‹ perl 5.13.3

  • Perl_blockhook_register (undocumented)

🌸 perl 5.13.2

  • find_rundefsv
  • foldEQ
  • foldEQ_locale
  • Perl_clone_params_del (undocumented)
  • Perl_clone_params_new (undocumented)
  • Perl_hv_fill (undocumented)
  • sv_dec_nomg
  • sv_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_PRCTL
  • HAS_PRCTL_SET_NAME

πŸ’œ perl 5.11.5

  • sv_pos_u2b_flags

πŸ“ perl 5.11.4

  • prescan_version
  • WARN_ILLEGALPROTO

🧚 perl 5.11.2

lexer besties assemble 🌈

  • CHARBITS
  • ENTER_with_name
  • LEAVE_with_name
  • lex_bufutf8 (marked experimental)
  • lex_discard_to (marked experimental)
  • lex_grow_linestr (marked experimental)
  • LEX_KEEP_PREVIOUS
  • lex_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_UTF8
  • lex_unstuff (marked experimental)
  • PL_keyword_plugin (marked experimental)
  • toLOWER_LATIN1

πŸ¦‹ perl 5.11.0

  • gv_add_by_type (undocumented)
  • Gv_AMupdate (undocumented)
  • is_ascii_string
  • is_invariant_string
  • is_utf8_invariant_string
  • PL_opfreehook
  • PUSH_MULTICALL
  • re_dup_guts
  • save_adelete (undocumented)
  • save_aelem_flags (undocumented)
  • save_hdelete (undocumented)
  • save_helem_flags (undocumented)
  • setdefout
  • SV_FORCE_UTF8_UPGRADE
  • SvOOK_offset
  • SVt_REGEXP
  • sv_utf8_upgrade_flags_grow
  • WARN_IMPRECISION

πŸ‘‘ perl 5.10.1

lots of HAS_ and _R energy in this era, we're so back πŸ™ˆ

  • GMTIME_MAX
  • GMTIME_MIN
  • HASATTRIBUTE_DEPRECATED
  • HAS_BUILTIN_EXPECT
  • HAS_GETADDRINFO
  • HAS_GETNAMEINFO
  • HAS_INETNTOP
  • HAS_INETPTON
  • HAS_TIMEGM
  • HvMROMETA
  • I_SYS_POLL
  • LOCALTIME_MAX
  • LOCALTIME_MIN
  • MRO_GET_PRIVATE_DATA
  • NV_OVERFLOWS_INTEGERS_AT
  • Perl_mro_get_from_name (undocumented)
  • Perl_mro_register (undocumented)
  • Perl_mro_set_mro (undocumented)
  • Perl_mro_set_private_data (undocumented)
  • PERL_USE_DEVEL
  • SAVEFREEOP
  • save_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_R
  • HAS_CRYPT_R
  • HAS_CTIME_R
  • HAS_DRAND48_R
  • HAS_GETGRENT_R
  • HAS_GETGRGID_R
  • HAS_GETGRNAM_R
  • HAS_GETHOSTBYADDR_R
  • HAS_GETHOSTBYNAME_R
  • HAS_GETHOSTENT_R
  • HAS_GETLOGIN_R
  • HAS_GETNETBYADDR_R
  • HAS_GETNETBYNAME_R
  • HAS_GETNETENT_R
  • HAS_GETPROTOBYNAME_R
  • HAS_GETPROTOBYNUMBER_R
  • HAS_GETPROTOENT_R
  • HAS_GETPWENT_R
  • HAS_GETPWNAM_R
  • HAS_GETPWUID_R
  • HAS_GETSERVBYNAME_R
  • HAS_GETSERVBYPORT_R
  • HAS_GETSERVENT_R
  • HAS_GETSPNAM_R
  • HAS_GMTIME_R
  • HAS_LOCALTIME_R
  • HAS_OFF64_T
  • HAS_PTHREAD_ATFORK
  • HAS_RANDOM_R
  • HAS_READDIR64_R
  • HAS_READDIR_R
  • HAS_SETRESGID_PROTO
  • HAS_SETRESUID_PROTO
  • HAS_SRAND48_R
  • HAS_SRANDOM_R
  • HAS_STRERROR_R
  • HAS_TMPNAM_R
  • HAS_TTYNAME_R
  • LOCALTIME_R_NEEDS_TZSET
  • START_MY_CXT
  • sv_destroyable
  • USE_ITHREADS
  • UVf (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

  • CopLABEL
  • find_runcv
  • gv_fetchfile_flags
  • HAS_CTERMID
  • HAS_PTHREAD_YIELD
  • HAS_SIGNBIT
  • L_R_TZSET
  • mro_get_linear_isa
  • mro_method_changed_in
  • my_dirfd (undocumented)
  • Perl_av_create_and_push (undocumented)
  • Perl_av_create_and_unshift_one (undocumented)
  • Perl_signbit (marked experimental)
  • pregcomp
  • PRINTF_FORMAT_NULL_OK
  • ptr_table_fetch (undocumented)
  • ptr_table_free (undocumented)
  • ptr_table_new (undocumented)
  • ptr_table_split (undocumented)
  • ptr_table_store (undocumented)
  • re_compile (undocumented)
  • savesharedpvn
  • scan_vstring (undocumented)
  • upg_version

🌸 perl 5.9.4

  • gv_name_set (undocumented)
  • GV_NOTQUAL
  • HAS_BUILTIN_CHOOSE_EXPR
  • HAS_C99_VARIADIC_MACROS
  • my_vsnprintf
  • newXS_flags (marked experimental) (undocumented)
  • PERL_MAGIC_hints
  • PERL_MAGIC_hintselem
  • Perl_PerlIO_context_layers (undocumented)
  • sv_does
  • sv_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:

  • dMULTICALL
  • doref β€” undocumented πŸ™ˆ
  • gv_const_sv
  • GV_NOADD_NOINIT
  • GV_NOEXPAND
  • HASATTRIBUTE_FORMAT
  • HASATTRIBUTE_MALLOC
  • HASATTRIBUTE_NONNULL
  • HASATTRIBUTE_NORETURN
  • HASATTRIBUTE_PURE
  • HASATTRIBUTE_UNUSED
  • HASATTRIBUTE_WARN_UNUSED_RESULT
  • HAS_CLEARENV
  • HAS_FUTIMES
  • HAS_MODFL_PROTO
  • HAS_SNPRINTF
  • HAS_UNSETENV
  • HAS_VSNPRINTF
  • hv_name_set β€” undocumented πŸ™ˆ
  • is_utf8_string_loclen
  • LIBM_LIB_VERSION
  • MULTICALL
  • newGIVENOP
  • newSVhek
  • Perl_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_p
  • PERL_MAGIC_rhash
  • PERL_MAGIC_symtab
  • POP_MULTICALL
  • savepvs
  • seed β€” undocumented πŸ™ˆ
  • share_hek β€” undocumented πŸ™ˆ
  • sortsv_flags
  • SvPVbytex_nolen
  • SvPV_free
  • SvPVx_const
  • SvPVx_nolen
  • vverify

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_WRAP
  • savesvpv
  • SvPVbyte_force
  • vnormal

πŸ’« perl 5.9.1 πŸ’«

a little six-piece, we love a snack:

  • hv_clear_placeholders
  • hv_scalar
  • Perl_ceil
  • scan_version
  • sv_2iv_flags
  • sv_2uv_flags

πŸ’« perl 5.9.0 πŸ’«

the MY_CXT family reunion, honestly iconic 🫢

  • _aMY_CXT
  • aMY_CXT
  • aMY_CXT_
  • dMY_CXT
  • hek_dup β€” undocumented πŸ™ˆ
  • MY_CXT
  • MY_CXT_CLONE
  • MY_CXT_INIT
  • new_version
  • parser_dup β€” undocumented πŸ™ˆ
  • Perl_my_cxt_init β€” undocumented πŸ™ˆ
  • _pMY_CXT
  • pMY_CXT
  • pMY_CXT_
  • save_set_svflags β€” undocumented πŸ™ˆ
  • SVs_PADSTALE
  • vcmp
  • vnumify
  • vstringify

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 πŸ¦‹

  • SvIsCOW
  • SvIsCOW_shared_hash

πŸ’« perl 5.8.1 πŸ’«

okay this one is a whole mixed bag and i'm obsessed:

  • CvPADLIST β€” marked experimental πŸ§ͺ
  • HAS_COPYSIGNL
  • HAS_FAST_STDIO
  • HAS_ILOGBL
  • HAS_PTHREAD_ATTR_SETSCOPE
  • HAS_SCALBNL
  • HAS_TM_TM_GMTOFF
  • IN_PERL_RUNTIME
  • is_utf8_string_loc
  • packlist
  • PL_comppad β€” marked experimental πŸ§ͺ
  • SAVEBOOL
  • savestack_grow_cnt β€” undocumented πŸ™ˆ
  • sv_cat_decode
  • sv_setpviv β€” DEPRECATED πŸ’€
  • sv_setpviv_mg β€” DEPRECATED πŸ’€
  • SvVOK
  • unpackstring
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_PROTO
  • CRYPT_R_PROTO
  • CTERMID_R_PROTO
  • CTIME_R_PROTO
  • DRAND48_R_PROTO
  • ENDGRENT_R_PROTO
  • ENDHOSTENT_R_PROTO
  • ENDNETENT_R_PROTO
  • ENDPROTOENT_R_PROTO
  • ENDPWENT_R_PROTO
  • ENDSERVENT_R_PROTO
  • GETGRENT_R_PROTO
  • GETGRGID_R_PROTO
  • GETGRNAM_R_PROTO
  • GETHOSTBYADDR_R_PROTO
  • GETHOSTBYNAME_R_PROTO
  • GETHOSTENT_R_PROTO
  • GETLOGIN_R_PROTO
  • GETNETBYADDR_R_PROTO
  • GETNETBYNAME_R_PROTO
  • GETNETENT_R_PROTO
  • GETPROTOBYNAME_R_PROTO
  • GETPROTOBYNUMBER_R_PROTO
  • GETPROTOENT_R_PROTO
  • GETPWENT_R_PROTO
  • GETPWNAM_R_PROTO
  • GETPWUID_R_PROTO
  • GETSERVBYNAME_R_PROTO
  • GETSERVBYPORT_R_PROTO
  • GETSERVENT_R_PROTO
  • GETSPNAM_R_PROTO
  • GMTIME_R_PROTO
  • HAS_TIME
  • HAS_TM_TM_ZONE
  • HeUTF8
  • hv_iternext_flags β€” marked experimental πŸ§ͺ
  • HV_ITERNEXT_WANTPLACEHOLDERS
  • hv_store_flags β€” marked experimental πŸ§ͺ β€” undocumented πŸ™ˆ
  • I_CRYPT
  • LOCALTIME_R_PROTO
  • nothreadhook
  • RANDOM_R_PROTO
  • READDIR64_R_PROTO
  • READDIR_R_PROTO
  • SETGRENT_R_PROTO
  • SETHOSTENT_R_PROTO
  • SETLOCALE_R_PROTO
  • SETNETENT_R_PROTO
  • SETPROTOENT_R_PROTO
  • SETPWENT_R_PROTO
  • SETSERVENT_R_PROTO
  • SRAND48_R_PROTO
  • SRANDOM_R_PROTO
  • STRERROR_R_PROTO
  • TMPNAM_R_PROTO
  • TTYNAME_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_utf8
  • fp_dup β€” undocumented πŸ™ˆ
  • gp_dup β€” undocumented πŸ™ˆ
  • gv_fetchmeth_autoload
  • HAS_DIRFD
  • HAS_FINITE
  • HAS_FINITEL
  • HAS_ISINF
  • HAS_PROCSELFEXE
  • he_dup β€” undocumented πŸ™ˆ
  • ibcmp_utf8
  • mg_dup β€” undocumented πŸ™ˆ
  • my_fork β€” undocumented πŸ™ˆ
  • my_socketpair β€” undocumented πŸ™ˆ
  • OP_DESC
  • OP_NAME
  • Perl_deb β€” undocumented πŸ™ˆ
  • Perl_deb_nocontext β€” undocumented πŸ™ˆ
  • perl_destruct
  • PERL_EXIT_DESTRUCT_END
  • PerlIO_clearerr
  • PerlIO_close
  • PerlIO_eof
  • PerlIO_error
  • PerlIO_fileno
  • PerlIO_flush
  • PerlIO_get_base
  • PerlIO_get_bufsiz
  • PerlIO_get_cnt
  • PerlIO_get_ptr
  • PERLIO_K_MULTIARG
  • PerlIO_read
  • PerlIO_seek
  • PerlIO_set_cnt
  • PerlIO_setlinebuf
  • PerlIO_set_ptrcnt
  • PerlIO_stderr
  • PerlIO_stdin
  • PerlIO_stdout
  • PerlIO_tell
  • PerlIO_unread β€” undocumented πŸ™ˆ
  • PerlIO_write
  • Perl_isfinite
  • Perl_isinf
  • PL_peepp
  • PROCSELFEXE_PATH
  • pv_uni_display
  • savesharedpv
  • save_shared_pvref β€” undocumented πŸ™ˆ
  • si_dup β€” undocumented πŸ™ˆ
  • sortsv
  • ss_dup β€” undocumented πŸ™ˆ
  • sv_copypv
  • sv_dup β€” undocumented πŸ™ˆ
  • SvLOCK
  • sv_magicext
  • sv_nosharing
  • sv_recode_to_utf8
  • SvSHARE
  • sv_uni_display
  • SvUNLOCK
  • UNI_DISPLAY_BACKSLASH
  • UNI_DISPLAY_ISPRINT
  • UNI_DISPLAY_QQ
  • UNI_DISPLAY_REGEX
  • unpack_str β€” DEPRECATED πŸ’€
  • uvchr_to_utf8_flags
  • vdeb β€” 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_CFG
  • DB_VERSION_MINOR_CFG
  • DB_VERSION_PATCH_CFG
  • getcwd_sv
  • HAS_FCHDIR
  • HAS_FLOCK_PROTO
  • HAS_NL_LANGINFO
  • HAS_SOCKATMARK_PROTO
  • HAS_STRFTIME
  • HAS_SYSCALL_PROTO
  • HAS_USLEEP_PROTO
  • I_LANGINFO
  • init_tm β€” undocumented πŸ™ˆ
  • mini_mktime
  • op_null
  • OSVERS
  • Perl_calloc β€” undocumented πŸ™ˆ
  • Perl_malloc β€” undocumented πŸ™ˆ
  • Perl_mfree β€” undocumented πŸ™ˆ
  • Perl_my_strftime β€” undocumented πŸ™ˆ
  • Perl_realloc β€” undocumented πŸ™ˆ
  • PERL_TARGETARCH
  • sv_catpvn_flags
  • sv_catsv_flags
  • sv_utf8_upgrade_flags
  • sv_utf8_upgrade_nomg
  • U_32
  • UNICODE_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_LOCK
  • gv_handler β€” undocumented πŸ™ˆ
  • HAS_FSYNC
  • HAS_GETITIMER
  • HAS_GETPAGESIZE
  • HAS_READV
  • HAS_RECVMSG
  • HAS_SBRK_PROTO
  • HAS_SENDMSG
  • HAS_SETITIMER
  • HAS_SIGPROCMASK
  • HAS_SOCKATMARK
  • HAS_STRTOQ
  • HAS_STRUCT_CMSGHDR
  • HAS_STRUCT_MSGHDR
  • HAS_UALARM
  • HAS_USLEEP
  • HAS_WRITEV
  • isALNUM_LC_uvchr
  • isALPHA_LC_uvchr
  • isCNTRL_LC_uvchr
  • isDIGIT_LC_uvchr
  • isGRAPH_LC_uvchr
  • isIDFIRST_LC_uvchr
  • isLOWER_LC_uvchr
  • is_lvalue_sub β€” undocumented πŸ™ˆ
  • isPRINT_LC_uvchr
  • isPUNCT_LC_uvchr
  • isSPACE_LC_uvchr
  • isUPPER_LC_uvchr
  • my_popen_list β€” undocumented πŸ™ˆ
  • NEED_VA_COPY
  • PerlIO_apply_layers
  • PerlIO_binmode
  • PerlIO_debug
  • PERLIO_F_APPEND
  • PERLIO_F_CANREAD
  • PERLIO_F_CANWRITE
  • PERLIO_F_CRLF
  • PERLIO_F_EOF
  • PERLIO_F_ERROR
  • PERLIO_F_FASTGETS
  • PERLIO_F_LINEBUF
  • PERLIO_F_OPEN
  • PERLIO_F_RDBUF
  • PERLIO_F_TEMP
  • PERLIO_F_TRUNCATE
  • PERLIO_F_UNBUF
  • PERLIO_F_UTF8
  • PERLIO_F_WRBUF
  • PERLIO_K_BUFFERED
  • PERLIO_K_CANCRLF
  • PERLIO_K_FASTGETS
  • PERLIO_K_RAW
  • Perl_printf_nocontext β€” undocumented πŸ™ˆ
  • POPpbytex
  • SAVEMORTALIZESV
  • SIG_SIZE
  • STDIO_PTR_LVAL_SETS_CNT
  • sv_force_normal_flags
  • sv_setref_uv
  • sv_unref_flags
  • sv_utf8_upgrade
  • U32_ALIGNMENT_REQUIRED
  • UNICODE_IS_SURROGATE
  • USE_PERLIO
  • UTF8_CHECK_ONLY
  • utf8_length
  • utf8n_to_uvchr
  • uvchr_to_utf8
  • UVXf

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_base
  • FILE_bufsiz
  • FILE_cnt
  • FILE_ptr
  • PerlIO_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_FREXPL
  • HAS_ISNAN
  • HAS_ISNANL
  • HAS_MODFL
  • isPSXSPC_LC
  • isUTF8_CHAR
  • is_utf8_string
  • NV_PRESERVES_UV_BITS
  • NVSIZE
  • Perl_isnan
  • PERL_PRIeldbl
  • PERL_SCNfldbl
  • save_generic_pvref β€” undocumented πŸ™ˆ
  • SvGAMAGIC
  • utf8_to_bytes β€” marked experimental πŸ§ͺ
  • utf8_to_uvchr β€” DEPRECATED πŸ’€
  • utf8_to_uvchr_buf
ok tiny reminder before you go copy-pasting: utf8_to_uvchr is DEPRECATED and bytes_to_utf8 / utf8_to_bytes / apply_attrs_string are 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_delete
  • av_exists
  • call_atexit (undocumented)
  • caller_cx
  • CopLINE
  • CPPLAST
  • CPPRUN
  • do_open9 (DEPRECATED) (undocumented)
  • DO_UTF8
  • Drand01
  • dump_all
  • dump_eval (undocumented)
  • dump_form (undocumented)
  • dump_packsubs
  • dump_sub (undocumented)
  • FFLUSH_NULL
  • get_context (undocumented)
  • get_ppaddr (undocumented)
  • Gid_t_f
  • Gid_t_sign
  • Gid_t_size
  • gv_dump (undocumented)
  • HAS_ACCESS
  • HAS_ATOLL
  • HAS_DRAND48_PROTO
  • HAS_EACCESS
  • HAS_FD_SET
  • HAS_FSEEKO
  • HAS_FTELLO
  • HAS_GETCWD
  • HAS_GETHOSTNAME
  • HAS_GETSPNAM
  • HAS_INT64_T
  • HAS_LDBL_DIG
  • HAS_LSEEK_PROTO
  • HAS_MADVISE
  • HAS_MKDTEMP
  • HAS_MKSTEMP
  • HAS_MKSTEMPS
  • HAS_MMAP
  • HAS_MPROTECT
  • HAS_MSYNC
  • HAS_MUNMAP
  • HAS_SQRTL
  • HAS_STRTOLD
  • HAS_STRTOLL
  • HAS_STRTOULL
  • HAS_STRTOUQ
  • HAS_TELLDIR_PROTO
  • I16SIZE
  • I16TYPE
  • I32SIZE
  • I32TYPE
  • I64SIZE
  • I64TYPE
  • I8SIZE
  • I8TYPE
  • I_INTTYPES
  • I_NETINET_TCP
  • I_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_LC
  • isALPHA_LC_utf8_safe
  • isALPHANUMERIC_LC_utf8_safe
  • isALPHANUMERIC_utf8_safe
  • isALPHANUMERIC_uvchr
  • isALPHA_utf8_safe
  • isALPHA_uvchr
  • isBLANK_LC_utf8_safe
  • isBLANK_utf8_safe
  • isBLANK_uvchr
  • isCNTRL_LC
  • isCNTRL_LC_utf8_safe
  • isCNTRL_utf8_safe
  • isCNTRL_uvchr
  • isDIGIT_LC_utf8_safe
  • isDIGIT_utf8_safe
  • isDIGIT_uvchr
  • isGRAPH_LC
  • isGRAPH_LC_utf8_safe
  • isGRAPH_utf8_safe
  • isGRAPH_uvchr
  • I_SHADOW
  • isIDCONT_LC_utf8_safe
  • isIDCONT_utf8_safe
  • isIDCONT_uvchr
  • isIDFIRST_LC_utf8_safe
  • isIDFIRST_utf8_safe
  • isIDFIRST_uvchr
  • isLOWER_LC_utf8_safe
  • isLOWER_utf8_safe
  • isLOWER_uvchr
  • isPRINT_LC_utf8_safe
  • isPRINT_utf8_safe
  • isPRINT_uvchr
  • isPSXSPC_LC_utf8_safe
  • isPSXSPC_utf8_safe
  • isPSXSPC_uvchr
  • isPUNCT_LC
  • isPUNCT_LC_utf8_safe
  • isPUNCT_utf8_safe
  • isPUNCT_uvchr
  • isSPACE_LC_utf8_safe
  • isSPACE_utf8_safe
  • isSPACE_uvchr
  • isUPPER_LC_utf8_safe
  • isUPPER_utf8_safe
  • isUPPER_uvchr
  • is_utf8_char (DEPRECATED)
  • isWORDCHAR_LC_utf8_safe
  • isWORDCHAR_utf8_safe
  • isWORDCHAR_uvchr
  • isXDIGIT_LC_utf8_safe
  • isXDIGIT_utf8_safe
  • isXDIGIT_uvchr
  • I_SYSLOG
  • I_SYSUIO
  • I_SYSUTSNAME
  • LSEEKSIZE
  • magic_dump (undocumented)
  • Mmap_t
  • MULTIPLICITY
  • my_atof
  • my_fflush_all (undocumented)
  • newANONATTRSUB (undocumented)
  • newATTRSUB
  • newXS
  • newXSproto
  • Off_t_size
  • op_dump
  • OPpEARLY_CV
  • PERL_ASYNC_CHECK
  • Perl_atan2
  • Perl_cos
  • PERL_EXIT_EXPECTED
  • Perl_exp
  • Perl_floor
  • Perl_fmod
  • Perl_frexp
  • Perl_log
  • Perl_modf
  • perl_parse
  • Perl_pow
  • PERL_PRIfldbl
  • PERL_PRIgldbl
  • PERL_REVISION (DEPRECATED)
  • Perl_sin
  • Perl_sqrt
  • PERL_SYS_INIT3
  • PHOSTNAME
  • PL_check
  • PL_exit_flags
  • PL_runops
  • pmop_dump (undocumented)
  • POPul
  • QUAD_IS_INT
  • QUAD_IS_INT64_T
  • QUAD_IS_LONG
  • QUAD_IS_LONG_LONG
  • QUADKIND
  • Rand_seed_t
  • require_pv
  • safesyscalloc
  • safesysfree
  • safesysmalloc
  • safesysrealloc
  • save_alloc (undocumented)
  • SAVEDESTRUCTOR
  • SAVEDESTRUCTOR_X
  • SAVEI8
  • save_vptr (undocumented)
  • scan_bin
  • SCHED_YIELD
  • seedDrand01
  • set_context (undocumented)
  • SITELIB_STEM
  • Size_t_size
  • Sock_size_t
  • STDIO_PTR_LVALUE
  • STDIO_STREAM_ARRAY
  • Strtol
  • Strtoul
  • sv_2pvutf8
  • sv_force_normal
  • SvIOK_notUV
  • SvIOK_only_UV
  • SvIOK_UV
  • sv_len_utf8
  • sv_len_utf8_nomg
  • SvPOK_only_UTF8
  • sv_pos_b2u
  • sv_pos_u2b
  • SvPVbyte_nolen
  • SvPVbytex
  • SvPVbytex_force
  • SvPVutf8
  • SvPVutf8_force
  • SvPVutf8_nolen
  • SvPVutf8x
  • SvPVutf8x_force
  • sv_rvweaken
  • SvUOK
  • sv_utf8_decode
  • sv_utf8_downgrade
  • sv_utf8_encode
  • SvUTF8_off
  • SvUTF8_on
  • toFOLD_utf8_safe
  • toFOLD_uvchr
  • toLOWER_utf8_safe
  • toLOWER_uvchr
  • toTITLE_utf8_safe
  • toTITLE_uvchr
  • toUPPER_utf8_safe
  • toUPPER_uvchr
  • U16SIZE
  • U16TYPE
  • U32SIZE
  • U32TYPE
  • U64SIZE
  • U64TYPE
  • U8SIZE
  • U8TYPE
  • Uid_t_f
  • Uid_t_sign
  • Uid_t_size
  • Uquad_t
  • USE_64_BIT_ALL
  • USE_64_BIT_INT
  • USE_LARGE_FILES
  • USE_STDIO_BASE
  • USE_STDIO_PTR
  • USE_THREADS
  • UTF8_CHK_SKIP
  • utf8_distance
  • utf8_hop
  • UTF8_MAXBYTES
  • UTF8_SAFE_SKIP
  • UTF8_SKIP
  • UTF8SKIP
  • vcroak
  • vform

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_PTHREAD
  • POPpx
  • save_generic_svref (undocumented)
  • SELECT_MIN_BITS
  • SvTIED_obj
  • USE_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)
  • DOUBLESIZE
  • fbm_compile
  • fbm_instr
  • get_op_descs (undocumented)
  • get_op_names (undocumented)
  • GRPASSWD
  • HAS_CSH
  • HAS_ENDGRENT
  • HAS_ENDHOSTENT
  • HAS_ENDNETENT
  • HAS_ENDPROTOENT
  • HAS_ENDPWENT
  • HAS_ENDSERVENT
  • HAS_GETGRENT
  • HAS_GETHOSTBYADDR
  • HAS_GETHOSTBYNAME
  • HAS_GETHOST_PROTOS
  • HAS_GETNETBYADDR
  • HAS_GETNETBYNAME
  • HAS_GETNETENT
  • HAS_GETNET_PROTOS
  • HAS_GETPROTOBYNAME
  • HAS_GETPROTOBYNUMBER
  • HAS_GETPROTOENT
  • HAS_GETPROTO_PROTOS
  • HAS_GETPWENT
  • HAS_GETSERVBYNAME
  • HAS_GETSERVBYPORT
  • HAS_GETSERVENT
  • HAS_GETSERV_PROTOS
  • HAS_LCHOWN
  • HAS_LONG_DOUBLE
  • HAS_LONG_LONG
  • HAS_SCHED_YIELD
  • HAS_SETGRENT
  • HAS_SETHOSTENT
  • HAS_SETNETENT
  • HAS_SETPROTOENT
  • HAS_SETPWENT
  • HAS_SETSERVENT
  • HAS_SETVBUF
  • I_ARPA_INET
  • I_NETDB
  • init_stacks (undocumented)
  • LONG_DOUBLESIZE
  • LONGLONGSIZE
  • mg_length (DEPRECATED)
  • mg_size (undocumented)
  • Netdb_hlen_t
  • Netdb_host_t
  • Netdb_name_t
  • Netdb_net_t
  • newHVhv (undocumented)
  • new_stackinfo (undocumented)
  • Pid_t
  • PL_curpad (marked experimental)
  • PL_in_my_stash (undocumented)
  • PL_maxsysfd
  • PL_modglobal
  • PL_restartop
  • PTRSIZE
  • PWPASSWD
  • regdump (undocumented)
  • sv_peek (undocumented)
  • sv_pvn_nomg (DEPRECATED) (undocumented)
  • SvPVx_force
Heads up bestie: PL_curpad is literally tagged (marked experimental), so don't go building your whole personality on it, k? And mg_length and sv_pvn_nomg are both wearing the (DEPRECATED) badge β€” respect the badge. 🚩

πŸ¦‹ perl 5.004_05

  • do_binmode (DEPRECATED) (undocumented)
  • GV_NOINIT
  • HAS_CHSIZE
  • HAS_GNULIBC
  • PWGECOS
  • save_aelem (undocumented)
  • save_helem (undocumented)
  • USE_SEMCTL_SEMID_DS
  • USE_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 πŸ’–

  • ARCHNAME
  • BIN_EXP
  • block_gimme (undocumented)
  • call_list (undocumented)
  • delimcpy
  • GIMME_V
  • gv_autoload4
  • gv_fetchmethod_autoload
  • G_VOID
  • HAS_GETTIMEOFDAY
  • HAS_INET_ATON
  • HAS_SETGROUPS
  • HAS_STRTOD
  • HAS_STRTOL
  • HAS_STRTOUL
  • HePV
  • HeSVKEY_set
  • hv_delayfree_ent (undocumented)
  • hv_free_ent (undocumented)
  • ibcmp_locale
  • IN_LOCALE
  • IN_LOCALE_COMPILETIME
  • IN_LOCALE_RUNTIME
  • isALNUM_LC
  • isALPHA_LC
  • isALPHANUMERIC_LC
  • isDIGIT_LC
  • isIDCONT_LC
  • isIDFIRST_LC
  • isLOWER_LC
  • isPRINT_LC
  • isSPACE_LC
  • isUPPER_LC
  • isWORDCHAR_LC
  • JMPENV_JUMP
  • mess_sv
  • my_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)
  • POPu
  • rsignal
  • rsignal_state (undocumented)
  • save_gp
  • SAVEI16
  • SAVESTACK_POS
  • SHORTSIZE
  • sv_cmp_locale
  • sv_derived_from
  • sv_magic_portable (undocumented)
  • SvSetMagicSV
  • SvSetMagicSV_nosteal
  • SvSetSV_nosteal
  • SvTAINTED
  • SvTAINTED_off
  • SvTAINTED_on
  • sv_vcatpvf
  • sv_vcatpvf_mg
  • sv_vcatpvfn
  • sv_vsetpvf
  • sv_vsetpvf_mg
  • sv_vsetpvfn
  • Timeval
  • toLOWER_LC
  • vmess
  • vnewSVpvf
  • vwarner

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 _EXP twin
  • ASSUME β€” we assume, bestie 🀷
  • aTHX, aTHX_ β€” the classic duo
  • aTHXR (undocumented), aTHXR_ (undocumented) β€” the R-flavoured twins, undocumenteder than the others
  • AvARRAY
  • av_clear, av_count, av_extend, av_fetch, av_fill
  • AvFILL
  • av_len, av_make, av_pop, av_push, av_shift, av_store, av_tindex, av_top_index, av_undef, av_unshift
  • ax β€” that's it, that's the name 🌸
  • BIN, BOM_UTF8, boolSV, BYTEORDER
  • call_argv, call_method, call_pv, call_sv β€” the whole call-a-thing squad πŸ‘‘
  • C_ARRAY_END, C_ARRAY_LENGTH, CASTFLAGS, CASTNEGFLOAT, CAT2, cBOOL
  • ckWARN, ckWARN2, ckWARN2_d, ckWARN3, ckWARN3_d, ckWARN4, ckWARN4_d, ckWARN_d β€” the full warning-check family, _d variants included, nobody gets left behind πŸ’–
  • CLASS
  • CopFILE, CopFILEAV, CopFILEGV, CopFILEGV_set, CopFILE_set, CopFILESV
  • CopSTASH, CopSTASH_eq, CopSTASHPV, CopSTASH_set
  • Copy, CopyD
  • CPERLscope (DEPRECATED), CPPMINUS, CPPSTDIN
  • croak_no_modify, croak_sv, croak_xs_usage, CSH
  • cv_const_sv, CvDEPTH (undocumented), CvGV, CvSTASH, cv_undef
  • dAX, dAXMARK, DB_Hash_t, DB_Prefix_t, DEFSV, DEFSV_set, die_sv, Direntry_t, dITEMS, dMARK, dMY_CXT_SV, dNOOP
  • do_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 of ds, it's the declaration girlies, they travel in packs πŸ’…
  • END_EXTERN_C, ENTER, EOF_NONBLOCK, ERRSV, eval_pv, eval_sv, EXTEND, EXTERN_C
  • filter_add, filter_del (undocumented), filter_read
  • FLEXFILENAMES, Fpos_t, Free_t, FREETMPS
  • Gconvert
  • G_DISCARD, G_EVAL, G_KEEPERR, G_LIST, G_METHOD, G_NOARGS, G_RETHROW, G_SCALAR
  • get_av, get_cv, get_cvn_flags, get_cvs, get_hv, get_sv
  • Gid_t, GIMME (DEPRECATED)
  • gp_free (undocumented), gp_ref (undocumented)
  • grok_bin, grok_hex, grok_number, GROK_NUMERIC_RADIX, grok_numeric_radix, grok_oct, Groups_t
  • GV_ADD, GV_ADDMULTI, GV_ADDWARN
  • GvAV, 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_fetchsv
  • gv_fullname (DEPRECATED) (undocumented), gv_fullname3 (undocumented)
  • GvHV, gv_HVadd (undocumented)
  • gv_init, gv_init_pvn
  • gv_IOadd (undocumented)
  • gv_stashpv, gv_stashpvn, gv_stashpvs, gv_stashsv
  • GvSV, 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_DUP2
  • HAS_FCHMOD, HAS_FCHOWN, HAS_FCNTL, HAS_FGETPOS, HAS_FLOCK, HAS_FORK, HAS_FPATHCONF, HAS_FSETPOS
  • HAS_GETGROUPS, HAS_GETHOSTENT, HAS_GETLOGIN, HAS_GETPGID, HAS_GETPGRP, HAS_GETPPID, HAS_GETPRIORITY, HAS_HTONL, HAS_HTONS
  • HAS_ISASCII, HAS_KILLPG, HAS_LINK, HAS_LOCALECONV, HAS_LOCKF, HAS_LSTAT, HAS_MBLEN, HAS_MBSTOWCS, HAS_MBTOWC
  • HAS_MKDIR, HAS_MKFIFO, HAS_MKTIME, HAS_MSG, HAS_NICE, HAS_NTOHL, HAS_NTOHS, HAS_OPEN3, HAS_PATHCONF, HAS_PAUSE
  • HAS_PIPE, HAS_POLL, HAS_QUAD, HAS_READDIR, HAS_READLINK, HAS_RENAME, HAS_REWINDDIR, HAS_RMDIR, HAS_SEEKDIR, HAS_SELECT, HAS_SEM
  • HAS_SETEGID, HAS_SETEUID, HAS_SETLINEBUF, HAS_SETLOCALE, HAS_SETPGID, HAS_SETPGRP, HAS_SETPRIORITY, HAS_SETREGID, HAS_SETRESGID, HAS_SETRESUID, HAS_SETREUID, HAS_SETSID β€” the whole SET* 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_SYSTEM
  • HAS_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, HeVAL
  • hv_clear, hv_delete, hv_delete_ent, hv_exists, hv_exists_ent, hv_fetch, hv_fetch_ent, hv_fetchs
  • HvFILL
  • hv_iterinit, hv_iterkey, hv_iterkeysv, hv_iternext, hv_iternextsv, hv_iterval, hv_ksplit (undocumented), hv_magic
  • HvNAME, HvNAMELEN_get
  • hv_store, hv_store_ent, hv_stores, hv_undef
  • I_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_L1
  • isALPHA, isALPHA_A, isALPHA_L1
  • isALPHANUMERIC, isALPHANUMERIC_A, isALPHANUMERIC_L1
  • isASCII, isASCII_A, isASCII_L1, isASCII_LC, isASCII_utf8_safe, isASCII_uvchr
  • isBLANK, isBLANK_A, isBLANK_L1, isBLANK_LC
  • isCNTRL, isCNTRL_A, isCNTRL_L1
  • isDIGIT, isDIGIT_A, isDIGIT_L1
  • isGRAPH, isGRAPH_A, isGRAPH_L1
  • isGV_with_GP β€” sitting right in the middle of the is party, main character energy honestly πŸ‘‘
  • isIDCONT, isIDCONT_A, isIDCONT_L1
  • isIDFIRST, isIDFIRST_A, isIDFIRST_L1
  • isLOWER, isLOWER_A, isLOWER_L1
  • IS_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 the is run but they were here first so we respect the ordering πŸ’…
  • isOCTAL, isOCTAL_A, isOCTAL_L1
  • isPRINT, isPRINT_A, isPRINT_L1
  • isPSXSPC, isPSXSPC_A, isPSXSPC_L1
  • isPUNCT, isPUNCT_A, isPUNCT_L1
  • isSPACE, isSPACE_A, isSPACE_L1
  • isUPPER, isUPPER_A, isUPPER_L1
  • isWORDCHAR, isWORDCHAR_A, isWORDCHAR_L1
  • isXDIGIT, 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_WAIT
  • items, I_TERMIOS, I_TIME, I_UNISTD, I_UTIME, I_V β€” the I_* header-check brigade, back together again ✨
  • IVdf, IV_MAX, IV_MIN, IVSIZE, IVTYPE, ix
  • LATIN1_TO_NATIVE, LEAVE, leave_scope (undocumented), LIKELY, load_module, LOC_SED, LONGSIZE, looks_like_number
  • Malloc_t, MARK, MEM_ALIGNBYTES, memCHRs, memEQ, memEQs, memNE, memNEs, memzero
  • mg_clear, mg_copy, mg_find, mg_findext, mg_free, mg_get, mg_magical, mg_set
  • Mode_t, Move, MoveD
  • mPUSHi, mPUSHn, mPUSHp, mPUSHs, mPUSHu
  • MUTABLE_AV, MUTABLE_CV, MUTABLE_GV, MUTABLE_HV, MUTABLE_IO, MUTABLE_PTR, MUTABLE_SV β€” the MUTABLE_* set, all seven, we stan πŸŽ€
  • mXPUSHi, mXPUSHn, mXPUSHp, mXPUSHs, mXPUSHu β€” the X versions of the push girlies, elevated πŸ’…
  • my_exit, my_pclose (undocumented), my_popen (undocumented), my_setenv, my_sprintf (DEPRECATED), my_strlcat, my_strlcpy, my_strnlen
  • NATIVE_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)
  • newASSIGNOP
  • newAV, newAVREF (undocumented)
  • newBINOP
  • newCONDOP, newCONSTSUB
  • newCVREF (undocumented)
  • newFORM (undocumented)
  • newGVgen (undocumented), newGVOP, newGVREF (undocumented)
  • newHV, newHVREF (undocumented)
  • newIO (undocumented)
  • newLISTOP, newLOGOP, newLOOPEX, newLOOPOP
  • newNULLLIST
  • newOP
  • newPMOP
  • newPROG (undocumented), newPVOP
  • newRANGE, 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 πŸŽ€

  • newSLICEOP
  • newSTATEOP
  • newSUB
  • newSV
  • newSViv
  • newSVnv
  • newSVOP
  • newSVpv
  • newSVpvn
  • newSVpvn_flags
  • newSVpvn_share
  • newSVpvn_utf8
  • newSVpvs
  • newSVpvs_flags
  • newSVpvs_share
  • newSVREF (undocumented)
  • newSVrv
  • newSVsv
  • newSVsv_flags
  • newSVsv_nomg
  • newSV_type
  • newSVuv
  • newUNOP

then the three musketeers with the capital N:

  • Newx
  • Newxc
  • Newxz

ngl the N section is serving variety 🌸

  • ninstr
  • NOOP
  • NOT_REACHED (undocumented)
  • Nullav (DEPRECATED)
  • Nullch
  • Nullcv (DEPRECATED)
  • Nullhv (DEPRECATED)
  • Nullsv
  • NVef
  • NVff
  • NVgf
  • NVTYPE

moving into O, which is giving main-character energy ✨

  • Off_t
  • OPf_KIDS
  • op_free
  • OpHAS_SIBLING
  • OpLASTSIB_set
  • OpMAYBESIB_set
  • OpMORESIB_set
  • OPpENTERSUB_AMPER
  • OpSIBLING
  • ORIGMARK
  • OSNAME

and then packWARN opens the door to the P section, which is honestly the biggest vibe in the whole list πŸ’€

  • packWARN
  • packWARN2
  • packWARN3
  • packWARN4
  • PERL_ABS
  • perl_alloc
  • PERL_BCDVERSION (undocumented)
  • perl_construct
  • Perl_croak (undocumented)
  • Perl_die (undocumented)
  • Perl_eval_pv (undocumented)
  • Perl_eval_sv (undocumented)
  • perl_free
  • PERL_HASH
  • PERL_INT_MAX
  • PERL_INT_MIN

the PerlIO girls, line up πŸ¦‹

  • PerlIO_canset_cnt
  • PerlIO_exportFILE
  • PerlIO_fast_gets
  • PerlIO_fdopen
  • PerlIO_findFILE
  • PerlIO_getc
  • PerlIO_getpos
  • PerlIO_has_base
  • PerlIO_has_cntptr
  • PerlIO_importFILE
  • PerlIO_open
  • PerlIO_printf
  • PerlIO_putc
  • PerlIO_puts
  • PerlIO_releaseFILE
  • PerlIO_reopen
  • PerlIO_rewind
  • PerlIO_setpos
  • PerlIO_stdoutf
  • PerlIO_ungetc
  • PerlIO_vprintf

back to the PERL_ constants, we're not even halfway and I'm thriving πŸ’–

  • PERL_LOADMOD_DENY
  • PERL_LOADMOD_IMPORT_OPS
  • PERL_LOADMOD_NOIMPORT
  • PERL_LONG_MAX
  • PERL_LONG_MIN

the whole PERL_MAGIC family reunion, everybody say hi πŸ‘‘

  • 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 (undocumented)
  • PERL_MAGIC_isa
  • PERL_MAGIC_isaelem
  • PERL_MAGIC_mutex (undocumented)
  • PERL_MAGIC_nkeys
  • PERL_MAGIC_overload (undocumented)
  • PERL_MAGIC_overload_elem (undocumented)
  • 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

okay deep breath, still in the P's 🫢

  • Perl_my_snprintf (undocumented)
  • 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_ELLIPSES
  • PERL_PV_PRETTY_LTGT
  • PERL_PV_PRETTY_QUOTE
  • PERL_QUAD_MAX
  • PERL_QUAD_MIN
  • perl_run
  • 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 (DEPRECATED)
  • PERL_SYS_INIT
  • PERL_SYS_TERM
  • 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

the PERL_VERSION crew β€” notice two of them are marked, respect the label bestie 😭

  • PERL_VERSION (DEPRECATED)
  • PERL_VERSION_GE
  • PERL_VERSION_GT
  • PERL_VERSION_LE
  • PERL_VERSION_LT
  • Perl_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_curcop
  • PL_curstash
  • PL_DBsignal (undocumented)
  • PL_debstash (undocumented)
  • PL_defgv
  • PL_diehook (undocumented)
  • PL_dirty (undocumented)
  • PL_errgv
  • PL_error_count (undocumented)
  • PL_expect (undocumented)
  • PL_hexdigit
  • PL_hints (undocumented)
  • PL_in_my (undocumented)
  • PL_laststatval (undocumented)
  • PL_lex_state (undocumented)
  • PL_lex_stuff (undocumented)
  • PL_linestr (undocumented)
  • PL_na
  • PL_no_modify (undocumented)
  • PL_parser
  • PL_perldb (undocumented)
  • PL_perl_destruct_level
  • PL_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_no
  • PL_sv_undef
  • PL_sv_yes
  • PL_tainted (undocumented)
  • PL_tainting (undocumented)
  • PL_tokenbuf (undocumented)
  • PL_Xpv (undocumented)

the Poison girls and the POP gang, we love a transition πŸ“

  • Poison
  • PoisonFree
  • PoisonNew
  • PoisonWith
  • POPi
  • POPl
  • POPn
  • POPp
  • POPs
  • pop_scope (undocumented)
  • pregexec
  • pregfree (undocumented)
  • PRIVLIB
  • PRIVLIB_EXP
  • pTHX
  • pTHX_
  • PTR2IV
  • PTR2nat
  • PTR2NV
  • PTR2ul
  • PTR2UV
  • PTRV (undocumented)

PUSH it, push it real good πŸ’…

  • PUSHi
  • PUSHMARK
  • PUSHmortal
  • PUSHn
  • PUSHp
  • PUSHs
  • push_scope (undocumented)
  • PUSHu
  • PUTBACK
  • pv_display
  • pv_escape
  • pv_pretty

Q and R, short and sweet, we love a breather 🧚

  • Quad_t
  • RANDBITS
  • RD_NODATA
  • Renew
  • Renewc
  • repeatcpy (undocumented)
  • REPLACEMENT_CHARACTER_UTF8
  • RETVAL
  • rninstr

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:

  • Safefree
  • save_aptr
  • save_ary
  • SAVE_DEFSV
  • SAVEDELETE
  • SAVEFREEPV
  • SAVEFREESV
  • save_hash
  • save_hptr
  • SAVEI32
  • SAVEINT
  • save_item
  • SAVEIV
  • save_list (DEPRECATED)
  • SAVELONG
  • save_nogv (DEPRECATED) (undocumented)
  • SAVEPPTR
  • savepv
  • savepvn
  • save_scalar
  • SAVESPTR
  • savestack_grow (undocumented)
  • save_svref
  • SAVETMPS

scan, select, sig β€” say that three times fast 😭

  • scan_hex
  • scan_oct
  • Select_fd_set_t
  • Shmat_t
  • SH_PATH
  • Sigjmp_buf
  • Siglongjmp
  • Signal_t
  • SIG_NAME
  • SIG_NUM
  • Sigsetjmp

the SITE/ST block, aka paths and stack pointers living their best life 🌸

  • SITEARCH
  • SITEARCH_EXP
  • SITELIB
  • SITELIB_EXP
  • Size_t
  • SP
  • SPAGAIN
  • SSize_t
  • ST
  • START_EXTERN_C
  • STARTPERL
  • start_subparse (undocumented)
  • STDCHAR
  • STMT_END
  • STMT_START
  • strEQ
  • strGE
  • strGT
  • STRINGIFY
  • strLE
  • strLT
  • strNE
  • strnEQ
  • strnNE
  • StructCopy
  • STR_WITH_LEN

okay now the sv_ and Sv portion, this is where it gets EXTREMELY long and I need you to trust me πŸ”₯

  • sv_2cv
  • sv_2io
  • sv_2mortal
  • sv_2pvbyte
  • SvAMAGIC_off (undocumented)
  • SvAMAGIC_on (undocumented)
  • sv_backoff
  • sv_bless
  • sv_catpv
  • sv_catpv_mg
  • sv_catpvn
  • sv_catpvn_mg
  • sv_catpvn_nomg
  • sv_catpvs
  • sv_catsv
  • sv_catsv_mg
  • sv_catsv_nomg
  • sv_chop
  • sv_clear
  • sv_cmp
  • SV_CONST_RETURN (undocumented)
  • SV_COW_DROP_PV
  • SV_COW_SHARED_HASH_KEYS (undocumented)
  • SvCUR
  • SvCUR_set
  • sv_dec
  • sv_dump
  • SvEND
  • sv_eq
  • SVf
  • SVfARG
  • sv_free
  • SVf_UTF8
  • SvGETMAGIC
  • sv_gets
  • SV_GMAGIC
  • SvGROW
  • SV_HAS_TRAILING_NUL
  • SV_IMMEDIATE_UNREF
  • sv_inc
  • sv_insert

the IOK/NIOK flags, we're just vibing through the alphabet at this point πŸ’œ

  • SvIOK
  • SvIOK_off
  • SvIOK_on
  • SvIOK_only
  • SvIOKp
  • sv_isa
  • sv_isobject
  • SvIV
  • SvIV_nomg
  • SvIV_set
  • SvIVX
  • SvIVx
  • sv_len
  • SvLEN
  • SvLEN_set
  • sv_magic
  • SvMAGIC_set
  • sv_mortalcopy
  • sv_mortalcopy_flags
  • SV_MUTABLE_RETURN (undocumented)
  • sv_newmortal
  • SvNIOK
  • SvNIOK_off
  • SvNIOKp

the NOK block, plus one very special SV_NOSTEAL sitting there looking cute ✨

  • SvNOK
  • SvNOK_off
  • SvNOK_on
  • SvNOK_only
  • SvNOKp
  • SV_NOSTEAL
  • SvNV
  • SvNV_nomg
  • SvNV_set
  • SvNVX
  • SvNVx
  • SvOK
  • SvOOK
  • SvOOK_off

POK o'clock, aka the string-flag portion, keep going, you're doing amazing 🫢

  • SvPOK
  • SvPOK_off
  • SvPOK_on
  • SvPOK_only
  • SvPOKp

and the big SvPV extended universe β€” yes there really are this many, no I'm not joking πŸ’€

  • SvPV
  • SvPVbyte
  • SvPV_const
  • SvPV_flags
  • SvPV_flags_const
  • 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
  • sv_pvn_force_flags
  • SvPV_nolen
  • SvPV_nolen_const
  • SvPV_nomg
  • SvPV_nomg_const
  • SvPV_nomg_const_nolen
  • SvPV_nomg_nolen
  • SvPV_renew
  • SvPV_set
  • SvPVX
  • SvPVx
  • SvPVX_const
  • SvPVX_mutable
  • SvPVx_nolen_const
  • SvPVXx

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_off
  • SvREADONLY_on
  • SvREFCNT
  • SvREFCNT_dec
  • 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
  • sv_reftype
  • sv_replace
  • sv_report_used
  • sv_reset
  • SvROK
  • SvROK_off
  • SvROK_on
  • SvRV
  • SvRV_set
  • SvRX
  • SvRXOK
  • sv_setiv
  • sv_setiv_mg
  • SvSETMAGIC
  • sv_setnv
  • sv_setnv_mg
  • sv_setpv
  • sv_setpv_mg
  • sv_setpvn
  • sv_setpvn_mg
  • sv_setpvs
  • sv_setref_iv
  • sv_setref_nv
  • sv_setref_pv
  • sv_setref_pvn
  • sv_setsv
  • SvSetSV
  • sv_setsv_flags
  • sv_setsv_mg
  • sv_setsv_nomg
  • sv_setuv
  • sv_setuv_mg
  • SvSHARED_HASH
  • SV_SMAGIC
  • SvSTASH
  • SvSTASH_set
  • SVs_TEMP
  • SvTAINT
  • SVt_IV
  • SVt_NULL
  • SVt_NV
  • SVt_PV
  • SVt_PVAV
  • SVt_PVCV
  • SVt_PVFM
  • SVt_PVGV
  • SVt_PVHV
  • SVt_PVIO
  • SVt_PVIV
  • SVt_PVLV
  • SVt_PVMG
  • SVt_PVNV
  • SvTRUE
  • SvTRUE_nomg
  • SvTRUEx
  • SvTYPE
  • svtype (undocumented)
  • sv_unmagic
  • sv_unmagicext
  • sv_unref
  • sv_upgrade
  • SvUPGRADE
  • sv_usepvn
  • sv_usepvn_mg
  • SvUTF8
  • SV_UTF8_NO_ENCODING (DEPRECATED)
  • SvUV
  • SvUV_nomg
  • SvUV_set
  • SvUVX
  • SvUVx
  • SvUVXx (DEPRECATED)
  • SvVSTRING_mg
  • switch_to_global_locale
  • sync_locale
  • taint_env (undocumented)
  • taint_proper (undocumented)
  • TARG
  • THIS
  • Time_t
  • toLOWER
  • toUPPER
  • Uid_t
  • UINT16_C
  • UINT32_C
  • UINTMAX_C
  • UNDERBAR
  • UNICODE_REPLACEMENT
  • UNI_TO_NATIVE
  • UNLIKELY
  • unsharepvn (undocumented)
  • USE_DYNAMIC_LOADING
  • UTF8f
  • UTF8fARG
  • UTF8_IS_INVARIANT
  • UTF8_MAXBYTES_CASE
  • U_V
  • UVCHR_IS_INVARIANT
  • UVCHR_SKIP
  • UV_MAX
  • UV_MIN
  • UVof
  • UVSIZE
  • UVTYPE
  • UVuf
  • UVxf
  • VAL_EAGAIN
  • VAL_O_NONBLOCK
  • vload_module
  • vwarn
  • WARN_ALL
  • WARN_AMBIGUOUS
  • WARN_ASSERTIONS (undocumented)
  • WARN_BAREWORD
  • WARN_CLOSED
  • WARN_CLOSURE
  • WARN_DEBUGGING
  • WARN_DEPRECATED
  • WARN_DIGIT
  • WARN_EXEC
  • WARN_EXITING
  • WARN_GLOB
  • WARN_INPLACE
  • WARN_INTERNAL
  • WARN_IO
  • WARN_LAYER
  • WARN_MALLOC
  • WARN_MISC
  • WARN_NEWLINE
  • WARN_NUMERIC
  • WARN_ONCE
  • WARN_OVERFLOW
  • WARN_PACK
  • WARN_PARENTHESIS
  • WARN_PIPE
  • WARN_PORTABLE
  • WARN_PRECEDENCE
  • WARN_PRINTF
  • WARN_PROTOTYPE
  • WARN_QW
  • WARN_RECURSION
  • WARN_REDEFINE
  • WARN_REGEXP
  • WARN_RESERVED
  • WARN_SEMICOLON
  • WARN_SEVERE
  • WARN_SIGNAL
  • WARN_SUBSTR
  • warn_sv
  • WARN_SYNTAX
  • WARN_TAINT
  • WARN_THREADS
  • WARN_UNINITIALIZED
  • WARN_UNOPENED
  • WARN_UNPACK
  • WARN_UNTIE
  • WARN_UTF8
  • WARN_VOID
  • whichsig
  • WIDEST_UTYPE (undocumented)
  • XCPT_CATCH
  • XCPT_RETHROW
  • XCPT_TRY_END
  • XCPT_TRY_START
  • XPUSHi
  • XPUSHmortal
  • XPUSHn
  • XPUSHp
  • XPUSHs
  • XPUSHu
  • XS (undocumented)
  • XSprePUSH (undocumented)
  • XSPROTO (undocumented)
  • XSRETURN
  • XSRETURN_EMPTY
  • XSRETURN_IV
  • XSRETURN_NO
  • XSRETURN_NV
  • XSRETURN_PV
  • XSRETURN_UNDEF
  • XSRETURN_UV
  • XSRETURN_YES
  • XST_mIV
  • XST_mNO
  • XST_mNV
  • XST_mPV
  • XST_mUNDEF
  • XST_mUV
  • XST_mYES
  • XS_VERSION
  • XS_VERSION_BOOTCHECK
  • Zero
  • ZeroD

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::PPPort was written by Kenneth Albanowski.
  • Version 2.x was ported to the Perl core by Paul Marquess.
  • Version 3.x was ported back to CPAN by Marcus Holland-Moritz.
  • Versions >= 3.22 are maintained by perl5 porters
  • 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