Devel::PPPort(3pm)
๐ Devel::PPPort(3pm) โ Perl Programmers Reference Guide
okay so bestie, this is Devel::PPPort โ Perl/Pollution/Portability โ and it's genuinely one of those modules that quietly keeps the whole XS ecosystem from falling apart. let's get into it ๐ธ
โจ NAME โจ
Devel::PPPort โ Perl/Pollution/Portability. yes that's the whole name, she's got range ๐
๐ฆ 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
like, the whole vibe in five lines:
$ 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
slay. that's the workflow. copy it, love it, live it ๐
๐ DESCRIPTION ๐
Perl's API has literally changed over time โ gaining new features, new functions, increasing its flexibility, and reducing the impact on the C namespace environment (that's the reduced pollution part, iykyk). 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. everyone wins, no cap โจ
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. (yes, that's a lot of Perls, she's been busy ๐
GetFileContents can be used to retrieve the file contents rather than writing it out. same energy, different delivery method ๐ซถ
This module is used by h2xs to write the file ppport.h. iconic collaboration honestly.
๐ 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. literally free compatibility, why would you not ๐ธ
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. main character eco-warrior energy fr fr ๐ฑ
๐ 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. ship it with the header, bestie, don't make people go hunting ๐ฆ
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. they're literally asking, so tell them ๐
๐ง 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. like a little portability fairy godmother ๐งโจ 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. self-documenting queen ๐
๐ฅ 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. simple. honest. reliable. we love her ๐
๐ GetFileContents
GetFileContents behaves like WriteFile above, but returns the contents of the would-be file rather than writing it out. so it's WriteFile but it hands you the goods instead of putting them on disk ๐ซดโจ
๐ COMPATIBILITY ๐
ppport.h supports Perl versions from 5.003_07 to 5.35.9 in threaded and non-threaded configurations. both flavors, all the way back, she's got you ๐
๐ธ 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.) so like, check the version table before you assume, bestie ๐
okay so before we start unpacking individual entries one by one, here's the whole entire roll call ๐ this is the master list, alphabetically sorted, and it is long โ but that's the point. Every single name here got a back-compat glow-up from Devel::PPPort, so if you're porting some crusty XS code and wanna know "does PPPort have my back on this one?", you scroll this list.
no skips. no "and so on". no cap.
๐ LIST OF API FUNCTIONS โจ
read it like a menu, bestie โ find your name, then go find its entry. a couple of things to keep in mind while you scan:
- the ordering is plain alphabetical, so yes, the very first entry starts with an underscore and the case-sensitivity is exactly how it looks ๐ซถ
- capital letters matter, lowercase matters, trailing underscores matter.
aMY_CXT,aMY_CXT_, and_aMY_CXTare three different things and they all live here. the way that C does not play about naming ๐ - do not "clean up" any of these when you copy them into your source. copy them character for character or the compiler will simply not recognize you ๐
- there are groups in here that lowkey look like families (the
is*character-class posse, thePERL_MAGIC_*collection, thePL_*globals) and they are โ vibe with them, don't merge them ๐ธ
and now, the list ๐
_aMY_CXT
aMY_CXT
aMY_CXT_
__ASSERT_
ASSUME
aTHX
aTHX_
aTHXR
aTHXR_
av_count
AvFILLp
av_tindex
av_top_index
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
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
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
HEf_SVKEY
HeUTF8
hv_fetchs
HvNAME_get
HvNAMELEN_get
hv_stores
IN_LOCALE
IN_LOCALE_COMPILETIME
IN_LOCALE_RUNTIME
IN_PERL_COMPILETIME
INT2PTR
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
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
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
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
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
PERL_MAGIC_arylen
PERL_MAGIC_backref
PERL_MAGIC_bm
PERL_MAGIC_collxfrm
PERL_MAGIC_dbfile
PERL_MAGIC_dbline
PERL_MAGIC_defelem
PERL_MAGIC_env
PERL_MAGIC_envelem
PERL_MAGIC_ext
PERL_MAGIC_fm
PERL_MAGIC_glob
PERL_MAGIC_isa
PERL_MAGIC_isaelem
PERL_MAGIC_mutex
PERL_MAGIC_nkeys
PERL_MAGIC_overload
PERL_MAGIC_overload_elem
PERL_MAGIC_overload_table
PERL_MAGIC_pos
PERL_MAGIC_qr
PERL_MAGIC_regdata
PERL_MAGIC_regdatum
PERL_MAGIC_regex_global
PERL_MAGIC_shared
PERL_MAGIC_shared_scalar
PERL_MAGIC_sig
PERL_MAGIC_sigelem
PERL_MAGIC_substr
PERL_MAGIC_sv
PERL_MAGIC_taint
PERL_MAGIC_tied
PERL_MAGIC_tiedelem
PERL_MAGIC_tiedscalar
PERL_MAGIC_utf8
PERL_MAGIC_uvar
PERL_MAGIC_uvar_elem
PERL_MAGIC_vec
PERL_MAGIC_vstring
PERL_PV_ESCAPE_ALL
PERL_PV_ESCAPE_FIRSTCHAR
PERL_PV_ESCAPE_NOBACKSLASH
PERL_PV_ESCAPE_NOCLEAR
PERL_PV_ESCAPE_QUOTE
PERL_PV_ESCAPE_RE
PERL_PV_ESCAPE_UNI
PERL_PV_ESCAPE_UNI_DETECT
PERL_PV_PRETTY_DUMP
PERL_PV_PRETTY_ELLIPSES
PERL_PV_PRETTY_LTGT
PERL_PV_PRETTY_NOCLEAR
PERL_PV_PRETTY_QUOTE
PERL_PV_PRETTY_REGPROP
PERL_QUAD_MAX
PERL_QUAD_MIN
PERL_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_STACK_OFFSET_DEFINED
PERL_STACK_REALIGN
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
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
_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
REPLACEMENT_CHARACTER_UTF8
RESTORE_LC_NUMERIC
SAVE_DEFSV
Stack_off_t
Stack_off_t_MAX
START_EXTERN_C
START_MY_CXT
start_subparse
STMT_END
STMT_START
STORE_LC_NUMERIC_SET_STANDARD
STORE_NUMERIC_SET_STANDARD
okay that was a lot of scrolling and you ate every single line, iconic behavior honestly ๐ this list is your lookup table โ half the battle in XS porting is just knowing the exact spelling of the thing you want, and now you have it, verbatim, no guessing, no typo-induced despair ๐ญ
keep it open in a split pane, Ctrl+F your way through it, and remember: nothing here is decorative. every name is a real thing you can reach for when your extension needs to work on older perls too ๐ฆ
STR_WITH_LENsv_2pvsv_2pvbytesv_2pvbyte_nolensv_2pv_flagssv_2pv_nolensv_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_dec_NNSvREFCNT_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_mgSvVOKsv_vsetpvfsv_vsetpvf_mgSvVSTRINGsv_vstring_getSvVSTRING_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 table is the whole entire tea: it lists every Perl API element that's available, sorted by the version where support starts. And yes, that means it includes everything ppport.h helps you out with plus the stuff it doesn't. ๐
Some cases it just doesn't make practical sense to support an element earlier than it already is โ like, UTF-8 functionality isn't provided prior to the release where it was first introduced. That's just how the timeline goes, bestie. ๐ฐ๏ธ
But in other cases, it's simply that no one has implemented support yet. Patches welcome, fr fr! Some elements are ported backward for some releases, but not all the way to 5.003_07.
So if an element โ call it ELEMENT โ isn't on this list, run this and find out why:
perl ppport.h --api-info=ELEMENT
A few entries below are marked as DEPRECATED. Do not use those for new code, and if you've already got them in existing code you should be converting those uses to something better. Periodt. ๐
Some entries are marked "experimental". That means you should not generally use them โ they may be removed or changed without notice. Wanna know why something's experimental? You can ask by sending email to perl5-porters@perl.org. ๐ง
And some entries are marked "undocumented". That means they aren't necessarily considered stable, and could be changed or removed in some future release without warning. So it's a bad idea to use them without further checking. It could be that they're considered perl-core-use-only; or it could be that Devel::PPPort doesn't know where to find their documentation, or that 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. ๐ซถ
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 ๐
the compatibility lineup says:
HAS_FCHMODATHAS_LINKATHAS_OPENATHAS_RENAMEATHAS_UNLINKATmg_freeextPerl_langinfosv_rvunweaken
perl 5.27.3 ๐ธ
tiny but iconic batch:
cv_get_call_checker_flagsPL_sv_zerosv_string_from_errnum
perl 5.27.2 ๐ฆ
okay, locale + UTF8 extended-flag girlies:
Perl_setlocaleUNICODE_DISALLOW_PERL_EXTENDEDUNICODE_WARN_PERL_EXTENDEDUTF8_DISALLOW_PERL_EXTENDEDUTF8_GOT_PERL_EXTENDEDUTF8_WARN_PERL_EXTENDED
perl 5.27.1 โจ
just one, but she ate:
is_utf8_invariant_string_loc
perl 5.25.11 ๐
single-entry moment:
DEFAULT_INC_EXCLUDES_DOT
perl 5.25.10 ๐
another solo star:
op_class
perl 5.25.9 ๐
yes bestie:
isASCII_LC_utf8_safe
perl 5.25.8 ๐ซถ
one more:
sv_set_undef
perl 5.25.7 ๐ฅ
this batch is giving double-format lore + utf8 hopping:
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 ๐
big UTF8 + float-format energy:
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 ๐
strict UTF8 checks + illegal C9 interchange flags:
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 ๐ง
short and sweet:
HAS_GAI_STRERRORI_XLOCALELONG_DOUBLE_IS_VAX_H_FLOAT
perl 5.25.3 ๐
float vibes + one experimental heads-up:
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 โญ
one tiny icon:
HAS_STRERROR_L
perl 5.25.1 ๐ฆ
solo entry:
op_parent
perl 5.24.0 ๐ท
one more:
HAS_MEMMEM
perl 5.23.9 ๐ซ
locale trio:
HAS_FREELOCALEHAS_NEWLOCALEHAS_USELOCALE
perl 5.23.8 ๐ฉท
siginfo constants + some mysterious docs situations:
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 ๐ง
doubledouble endianness constants + above-31-bit flags:
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/statfs + locale headers + sv_ref:
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 ๐ผ
integer + UTF8 classification crew:
INT64_CUINT64_CUTF8_IS_NONCHARUTF8_IS_SUPERUTF8_IS_SURROGATE
perl 5.23.0 ๐ซง
float-byte-size constants:
DOUBLEINFBYTESDOUBLEMANTBITSDOUBLENANBYTESLONGDBLINFBYTESLONGDBLMANTBITSLONGDBLNANBYTESNVMANTBITS
perl 5.21.10 ๐ง
LC_NUMERIC manipulation crew:
DECLARATION_FOR_LC_NUMERIC_MANIPULATIONRESTORE_LC_NUMERICSTORE_LC_NUMERIC_FORCE_TO_UNDERLYINGSTORE_LC_NUMERIC_SET_TO_NEEDED
perl 5.21.9 ๐ช
rounding has_* checks + experimental bitwise warning:
HAS_LLRINTLHAS_LLROUNDLHAS_LRINTLHAS_LROUNDLWARN_EXPERIMENTAL__BITWISE
perl 5.21.8 ๐ฌ
one experimental function + two experimental warnings:
sv_get_backrefs(marked experimental)WARN_EXPERIMENTAL__CONST_ATTRWARN_EXPERIMENTAL__RE_STRICT
perl 5.21.7 ๐งธ
padname/padlist era + gdbm headers:
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 ๐ฅ
bestie, this one is a whole era. block ops, IEEE double formats, DOUBLEKIND, and a mountain of math HAS_* checks:
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 + method ops + magic + SV byte/utf8 cats + refaliasing warning:
cv_nameCV_NAME_NOTQUALHAS_LC_MONETARY_2008newMETHOPnewMETHOP_namedPERL_MAGIC_debugvarPERL_MAGIC_lvrefSV_CATBYTESSV_CATUTF8WARN_EXPERIMENTAL__REFALIASING
perl 5.21.4 ๐งฎ
call-checker flags, inf/nan grokking, fegetround/fenv, and a bunch of math functions:
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 ๐
long-double format lore + LONG_DOUBLEKIND + Perl_ldexp:
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 ๐บ
number grokking + op sibling splicing + scan/warn constants:
grok_number_flagsop_sibling_splicePERL_SCAN_TRAILINGWARN_MISSINGWARN_REDUNDANT
perl 5.21.1 ๐ซ
backtrace/dladdr/pointer-diff/wide-char checks + execinfo + one undocumented:
HAS_BACKTRACEHAS_DLADDRHAS_PTRDIFF_THAS_WCSCMPHAS_WCSXFRMI_EXECINFOmarkstack_grow(undocumented)
perl 5.19.10 ๐
single op-type check:
OP_TYPE_IS_OR_WAS
perl 5.19.9 ๐ชฉ
one experimental signatures warning:
WARN_EXPERIMENTAL__SIGNATURES
perl 5.19.7 ๐ฏ
solo:
OP_TYPE_IS
perl 5.19.5 ๐ง
one experimental postderef warning:
WARN_EXPERIMENTAL__POSTDEREF
perl 5.19.4 ๐ผ
safe syscall macros/functions + syscall warning:
IS_SAFE_SYSCALLis_safe_syscallWARN_SYSCALLS
perl 5.19.3 ๐งต
exit constants + a byte-to-UTF8 position function:
PERL_EXIT_ABORTPERL_EXIT_WARNsv_pos_b2u_flags
perl 5.19.2 ๐
just one:
G_METHOD_NAMED
perl 5.19.1 ๐ป
fold/lower/title/upper case macro crew:
toFOLDtoFOLD_AtoLOWER_AtoLOWER_L1toTITLEtoTITLE_AtoUPPER_A
perl 5.18.0 ๐ต
one undocumented:
hv_rand_set(undocumented)
perl 5.17.11 ๐ช
one experimental smartmatch warning:
WARN_EXPERIMENTAL__SMARTMATCH
perl 5.17.8 ๐
locale checks + experimental regex sets warning:
isALPHANUMERIC_LC_uvchrisIDCONT_LC_uvchrWARN_EXPERIMENTAL__REGEX_SETS
perl 5.17.7 ๐
locale category checks + refcount/true fast macros:
isALNUMC_LC_uvchrisASCII_LC_uvchrisBLANK_LC_uvchrisPSXSPC_LC_uvchrisWORDCHAR_LC_uvchrisXDIGIT_LC_uvchrSvREFCNT_dec_NNSvTRUE_NNSvTRUE_nomg_NN
perl 5.17.6 ๐ง
one:
READ_XDIGIT
perl 5.17.5 ๐ชด
one experimental lexical subs warning:
WARN_EXPERIMENTAL__LEXICAL_SUBS
perl 5.17.4 ๐ช
super-gv + IP MREQ source + a whole pad/padlist/padname situation + experimental warnings:
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 ๐ธ
IP MREQ + relocatable inc + sv-copypv/vcatpvfn flags:
HAS_IP_MREQPERL_RELOCATABLE_INCsv_copypv_flagssv_copypv_nomgsv_vcatpvfn_flags
perl 5.17.1 ๐
one experimental + one cop stash setter:
alloccopstash(marked experimental)CopSTASHPV_set
perl 5.16.0 ๐
cop label length crew:
CopLABEL_lenCopLABEL_len_flags
perl 5.15.8 ๐ฆ
IPv6 MREQ + sockaddr_in6 + utf8 char buf + op checker wrapper:
HAS_IPV6_MREQHAS_SOCKADDR_IN6is_utf8_char_bufwrap_op_checker
perl 5.15.7 ๐ผ
one:
HAS_ISBLANK
perl 5.15.6 ๐ซ
one:
newCONSTSUB_flags
๐ perl 5.15.4 ๐
Okay bestie, this drop is giving autoload era and honestly the gv_* family is eating:
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 squad arrived and they brought friends:
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 ๐
This one is the whole unicode-disallow/warn collection and it is so much, but every single one is here, no cap:
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 ๐ซถ
Four parse_* besties, all four experimental, all four iconic:
parse_arithexprโ (marked experimental)parse_fullexprโ (marked experimental)parse_listexprโ (marked experimental)parse_termexprโ (marked experimental)
๐ญ perl 5.13.7 ๐ญ
The cophh era, lowkey legendary. Buckle in:
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 ๐ฅ
Big list, big slay. The call-checker girlies and the sv_*_flags squad both showed up:
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 ๐
Static inline nation rise:
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 ๐ง
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 ๐ธ
The lexer girlies arrived and it's giving main character energy:
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 ๐ซถ
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 ๐ญ
Look at all these _R reentrant checks, genuinely so many, but every one gets its moment:
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)
Heads up bestie: UVf is DEPRECATED, so likeโฆ don't build your whole personality on it, mwah.
๐ฅ 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
Another one, bestie: sv_nounlocking is DEPRECATED too. Not me warning you twice in one page ๐
okay so this is the actual timeline of when each little symbol slid into core perl โ Devel::PPPort backports them all so ur XS code can vibe on older perls. here we go, chronologically backwards, as one does ๐
perl 5.9.3 ๐ฆ
the 5.9.3 drop, and she brought a whole crowd:
dMULTICALLdorefโ(undocumented), no docs anywhere, she's a mystery ๐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
perl 5.9.2 ๐ธ
smaller batch, but she's got range:
find_rundefsvoffsetโ(DEPRECATED), she's been retired ๐op_refcnt_lockโ(undocumented)op_refcnt_unlockโ(undocumented)PERL_MALLOC_WRAPsavesvpvSvPVbyte_forcevnormal
perl 5.9.1 ๐
six little icons, no notes:
hv_clear_placeholdershv_scalarPerl_ceilscan_versionsv_2iv_flagssv_2uv_flags
perl 5.9.0 โจ
the versioning era begins, and the MY_CXT family ate:
_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
perl 5.8.9 ๐
a single solitary queen:
Perl_hv_assertโ(undocumented), no docs, just vibes ๐
perl 5.8.8 ๐
just two, matching energy:
__ASSERT_rvpv_dupโ(undocumented)
perl 5.8.3 ๐
the copy-on-write girlies arrive:
SvIsCOWSvIsCOW_shared_hash
perl 5.8.1 ๐ง
okay this one's stacked, and two of them are flagged (marked experimental) so lowkey tread carefully:
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
perl 5.8.0 ๐ซถ
this is the _R_PROTO era bestie, she showed up with the entire thread-safety collection and honestly? iconic. also a few strays tagged (marked experimental) and one that's both (marked experimental) and (undocumented):
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)and(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
perl 5.7.3 ๐ซ
okay 5.7.3 is serving a lot โ dup functions, the PerlIO crew, the UNI_DISPLAY flags, all of it:
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)
perl 5.7.2 ๐
the Berkeley DB constants, the locale stuff, and a whole row of (undocumented) allocator friends:
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 ๐ฅ
this one is so long, she's giving main character energy. the is*_LC_uvchr family, the whole PERLIO_F_* flag set, and bytes_from_utf8 is (marked experimental):
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
perl 5.7.0 โญ
tiny era, big FILE_* energy:
FILE_baseFILE_bufsizFILE_cntFILE_ptrPerlIO_fillโ(undocumented)
perl 5.6.1 ๐
the oldest one in this batch, and she's a mixed bag โ two (marked experimental), one that's (marked experimental) and (undocumented), and one (DEPRECATED) ๐:
apply_attrs_stringโ(marked experimental)and(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
๐ธ perl 5.6.0
okay so THIS is the big one โ 5.6.0 is giving main character energy with the longest roster in the whole list ๐ญ buckle up bestie, we're going through every single one ๐
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_POLLisALNUMC_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
likeโฆ that's a whole vibe all by itself, no notes ๐
๐ฆ perl 5.005_03
short and sweet, which honestly after that last list is a relief bestie ๐ฎโ๐จ
get_vtblโ (undocumented)I_PTHREADPOPpxsave_generic_svrefโ (undocumented)SELECT_MIN_BITSSvTIED_objUSE_STAT_BLOCKS
๐ perl 5.005
and now we're back to a chunky one, of course we are ๐
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
okay PL_curpad being marked experimental is so real of it ๐ซถ
โจ perl 5.004_05
tiny era, big "I was there" energy ๐ซ
do_binmodeโ (DEPRECATED) (undocumented)GV_NOINITHAS_CHSIZEHAS_GNULIBCPWGECOSsave_aelemโ (undocumented)save_helemโ (undocumented)USE_SEMCTL_SEMID_DSUSE_SEMCTL_SEMUN
๐ perl 5.004
and we wrap this part on 5.004 โ vintage bestie hours ๐ literally the old guard, and there's a LOT of them:
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 block done ๐ซก but bestie we are SO not finished โ slide into the next part, there's more coming ๐๐
perl 5.003_07 (or maybe earlier)
okay bestie, buckle in โ this chunk of the list is the ancient era, like the Unix equivalent of finding your mom's old mixtapes ๐ everything here is old-old, and the ones marked undocumented are basically the "no thoughts, head empty" of the API โ they exist, that's all we're legally allowed to say ๐
amagic_call(undocumented)ARCHLIBARCHLIB_EXPASSUMEaTHXaTHX_aTHXR(undocumented)aTHXR_(undocumented)AvARRAYav_clearav_countav_extendav_fetchav_fillAvFILLav_lenav_makeav_popav_pushav_shiftav_storeav_tindexav_top_indexav_undefav_unshiftaxBINBOM_UTF8boolSVBYTEORDERcall_argvcall_methodcall_pvcall_svC_ARRAY_ENDC_ARRAY_LENGTHCASTFLAGSCASTNEGFLOATCAT2cBOOLckWARNckWARN2ckWARN2_dckWARN3ckWARN3_dckWARN4ckWARN4_dckWARN_dCLASSCopFILECopFILEAVCopFILEGVCopFILEGV_setCopFILE_setCopFILESVCopSTASHCopSTASH_eqCopSTASHPVCopSTASH_setCopyCopyDCPERLscope(DEPRECATED)CPPMINUSCPPSTDINcroak_no_modifycroak_svcroak_xs_usageCSHcv_const_svCvDEPTH(undocumented)CvGVCvSTASHcv_undefdAXdAXMARKDB_Hash_tDB_Prefix_tDEFSVDEFSV_setdie_svDirentry_tdITEMSdMARKdMY_CXT_SVdNOOPdo_close(undocumented)do_join(undocumented)do_open(undocumented)dORIGMARKdo_sprintf(undocumented)dounwind(undocumented)dowantarray(undocumented)dSPdTARGETdTHRdTHXdTHXadTHXoadTHXR(undocumented)dUNDERBARdVARdXCPTdXSARGSdXSI32dXSTARG(undocumented)END_EXTERN_CENTEREOF_NONBLOCKERRSVeval_pveval_svEXTENDEXTERN_Cfilter_addfilter_del(undocumented)filter_readFLEXFILENAMESFpos_tFree_tFREETMPSGconvertG_DISCARDget_avget_cvget_cvn_flagsget_cvsget_hvget_svG_EVALGid_tGIMME(DEPRECATED)G_KEEPERRG_LISTG_METHODG_NOARGSgp_free(undocumented)gp_ref(undocumented)G_RETHROWgrok_bingrok_hexgrok_numberGROK_NUMERIC_RADIXgrok_numeric_radixgrok_octGroups_tG_SCALARGV_ADDGV_ADDMULTIGV_ADDWARNGvAVgv_AVadd(undocumented)GvCVgv_efullname(DEPRECATED) (undocumented)gv_efullname3(undocumented)gv_fetchfilegv_fetchmethgv_fetchmethodgv_fetchpvgv_fetchpvn_flagsgv_fetchpvsgv_fetchsvgv_fullname(DEPRECATED) (undocumented)gv_fullname3(undocumented)GvHVgv_HVadd(undocumented)gv_initgv_init_pvngv_IOadd(undocumented)gv_stashpvgv_stashpvngv_stashpvsgv_stashsvGvSVGvSVn
the way the HAS_* block just goes off for like a hundred lines ๐ญ this is the "does your system even have this syscall" era, and honestly? iconic. no notes.
HAS_ALARMHAS_CHOWNHAS_CHROOTHAS_CRYPTHAS_CUSERIDHAS_DIFFTIMEHAS_DLERRORHAS_DUP2HAS_FCHMODHAS_FCHOWNHAS_FCNTLHAS_FGETPOSHAS_FLOCKHAS_FORKHAS_FPATHCONFHAS_FSETPOSHAS_GETGROUPSHAS_GETHOSTENTHAS_GETLOGINHAS_GETPGIDHAS_GETPGRPHAS_GETPPIDHAS_GETPRIORITYHAS_HTONLHAS_HTONSHAS_ISASCIIHAS_KILLPGHAS_LINKHAS_LOCALECONVHAS_LOCKFHAS_LSTATHAS_MBLENHAS_MBSTOWCSHAS_MBTOWCHAS_MKDIRHAS_MKFIFOHAS_MKTIMEHAS_MSGHAS_NICEHAS_NTOHLHAS_NTOHSHAS_OPEN3HAS_PATHCONFHAS_PAUSEHAS_PIPEHAS_POLLHAS_QUADHAS_READDIRHAS_READLINKHAS_RENAMEHAS_REWINDDIRHAS_RMDIRHAS_SEEKDIRHAS_SELECTHAS_SEMHAS_SETEGIDHAS_SETEUIDHAS_SETLINEBUFHAS_SETLOCALEHAS_SETPGIDHAS_SETPGRPHAS_SETPRIORITYHAS_SETREGIDHAS_SETRESGIDHAS_SETRESUIDHAS_SETREUIDHAS_SETSIDHAS_SHMHAS_SHMAT_PROTOTYPEHAS_SIGACTIONHAS_SIGSETJMPHAS_SOCKETHAS_SOCKETPAIRHAS_STRCOLLHAS_STRXFRMHAS_SYMLINKHAS_SYSCALLHAS_SYSCONFHAS_SYS_ERRLISTHAS_SYSTEMHAS_TCGETPGRPHAS_TCSETPGRPHAS_TELLDIRHAS_TIMESHAS_TRUNCATEHAS_TZNAMEHAS_UMASKHAS_UNAMEHAS_WAIT4HAS_WAITPIDHAS_WCSTOMBSHAS_WCTOMB
then we slam straight into the hash internals and it's giving "I have seen things" energy ๐ซถ
HEf_SVKEYHeHASHHeKEYHeKLENHeSVKEYHeSVKEY_forceHeVALhv_clearhv_deletehv_delete_enthv_existshv_exists_enthv_fetchhv_fetch_enthv_fetchsHvFILLhv_iterinithv_iterkeyhv_iterkeysvhv_iternexthv_iternextsvhv_itervalhv_ksplit(undocumented)hv_magicHvNAMEHvNAMELEN_gethv_storehv_store_enthv_storeshv_undefI_32ibcmpI_DIRENTI_DLFCNI_GRPI_LOCALEI_NETINET_ININ_PERL_COMPILETIMEinstrINT16_CINT2PTRINT32_CINTMAX_CINTSIZEI_PWD
the is* family, aka the character-classification girlies ๐ธ they come in flavors: plain, _A, _L1, and sometimes _LC or _utf8_safe or _uvchr โ don't mix up your suffixes, bestie, it's a whole alphabet soup situation ๐
isALNUMisALNUM_AisALNUMCisALNUMC_AisALNUMC_L1isALPHAisALPHA_AisALPHA_L1isALPHANUMERICisALPHANUMERIC_AisALPHANUMERIC_L1isASCIIisASCII_AisASCII_L1isASCII_LCisASCII_utf8_safeisASCII_uvchrisBLANKisBLANK_AisBLANK_L1isBLANK_LCisCNTRLisCNTRL_AisCNTRL_L1isDIGITisDIGIT_AisDIGIT_L1isGRAPHisGRAPH_AisGRAPH_L1isGV_with_GPisIDCONTisIDCONT_AisIDCONT_L1isIDFIRSTisIDFIRST_AisIDFIRST_L1isLOWERisLOWER_AisLOWER_L1IS_NUMBER_GREATER_THAN_UV_MAXIS_NUMBER_INFINITYIS_NUMBER_IN_UVIS_NUMBER_NANIS_NUMBER_NEGIS_NUMBER_NOT_INTisOCTALisOCTAL_AisOCTAL_L1isPRINTisPRINT_AisPRINT_L1isPSXSPCisPSXSPC_AisPSXSPC_L1isPUNCTisPUNCT_AisPUNCT_L1isSPACEisSPACE_AisSPACE_L1isUPPERisUPPER_AisUPPER_L1isWORDCHARisWORDCHAR_AisWORDCHAR_L1isXDIGITisXDIGIT_AisXDIGIT_L1isXDIGIT_LCI_SYS_DIRI_SYS_FILEI_SYS_IOCTLI_SYS_PARAMI_SYS_RESOURCEI_SYS_SELECTI_SYS_STATI_SYS_TIMEI_SYS_TIMESI_SYS_TYPESI_SYS_UNI_SYS_WAITitemsI_TERMIOSI_TIMEI_UNISTDI_UTIMEI_VIVdfIV_MAXIV_MINIVSIZEIVTYPEixLATIN1_TO_NATIVELEAVEleave_scope(undocumented)LIKELYload_moduleLOC_SEDLONGSIZElooks_like_numberMalloc_tMARKMEM_ALIGNBYTESmemCHRsmemEQmemEQsmemNEmemNEsmemzeromg_clearmg_copymg_findmg_findextmg_freemg_getmg_magicalmg_setMode_tMoveMoveDmPUSHimPUSHnmPUSHpmPUSHsmPUSHuMUTABLE_AVMUTABLE_CVMUTABLE_GVMUTABLE_HVMUTABLE_IOMUTABLE_PTRMUTABLE_SVmXPUSHimXPUSHnmXPUSHpmXPUSHsmXPUSHumy_exitmy_pclose(undocumented)my_popen(undocumented)my_setenvmy_sprintf(DEPRECATED)my_strlcatmy_strlcpymy_strnlenNATIVE_TO_LATIN1NATIVE_TO_UNInewANONHASH(undocumented)newANONLIST(undocumented)newANONSUB(undocumented)newASSIGNOPnewAVnewAVREF(undocumented)newBINOPnewCONDOPnewCONSTSUBnewCVREF(undocumented)newFORM(undocumented)newGVgen(undocumented)newGVOPnewGVREF(undocumented)newHVnewHVREF(undocumented)newIO(undocumented)newLISTOPnewLOGOPnewLOOPEXnewLOOPOPnewNULLLISTnewOPnewPMOPnewPROG(undocumented)newPVOPnewRANGEnewRVnewRV_incnewRV_noinc
and that's where we pause, mid-new* roll call, because there is so much more coming ๐ฅ
SvIV_nomgโ name's right there, no blurb in the index, don't shoot the messenger ๐ซถSvIV_setโ that's the entry, that's the whole teaSvIVXโ capital X bestie, living loudSvIVxโ lowercase x bestie, living quietsv_lenโ function-style, lowercase, doing its thingSvLENโ uppercase, all caps, main characterSvLEN_setโ the_setsibling, matching energysv_magicโ lowercasesv_crowd, we see you ๐SvMAGIC_setโ uppercase counterpart, slaysv_mortalcopyโ no description in the source, so no guesses from me, periodtsv_mortalcopy_flagsโ the_flagsupgrade, icon behaviourSV_MUTABLE_RETURNโ (undocumented) ๐ซฃ the docs ghosted ussv_newmortalโ listed, iconic, nextSvNIOKโ theN-I-OKspelling goes hard nglSvNIOK_offโ_offvariant, present and accounted forSvNIOKpโ trailingp, no explanation, mysterySvNOKโ same family, same vibeSvNOK_offโ_off, yesSvNOK_onโ_on, also yesSvNOK_onlyโ_only, the extra one ๐SvNOKpโpagain, we moveSV_NOSTEALโ uppercase flag, loud about itSvNVโ the NV branch reporting for dutySvNV_nomgโ_nomgtwin ๐ซถSvNV_setโ_settwinSvNVXโ capital X, againSvNVxโ lowercase x, againSvOKโ the shortest one, ateSvOOKโ double O, no notesSvOOK_offโ_off, correctSvPOKโPOKera begins โจSvPOK_offโ_offSvPOK_onโ_onSvPOK_onlyโ_onlySvPOKpโpSvPVโ okay THE one, the legend, the moment ๐ everybody knows her nameSvPVbyteโSvPVbut she broughtbyte, no further comment from meSvPV_constโ_const, classySvPV_flagsโ_flags, the flexible oneSvPV_flags_constโ both suffixes, overachiever ๐SvPV_flags_mutableโ_mutable, different vibe altogetherSvPV_forceโ theforceline of the family, dramaticSvPV_force_flagsโ_force+_flagsSvPV_force_flags_mutableโ three suffixes deep, unstoppableSvPV_force_flags_nolenโ same, plus_nolenSvPV_force_mutableโ the pairing continuesSvPV_force_nolenโ yupSvPV_force_nomgโ_nomgenters the chatSvPV_force_nomg_nolenโ the whole combo, respectSvPV_mutableโ_mutablesolo, iconicsv_pvn_force_flagsโ note the lowercase function spelling, bestie ๐ซถSvPV_nolenโ the classic_nolen, we know herSvPV_nolen_constโ two suffixes, still slayingSvPV_nomgโ_nomg, againSvPV_nomg_constโ doubled upSvPV_nomg_const_nolenโ longest name in this whole stretch, she ate ๐SvPV_nomg_nolenโ nearly the same, one suffix lighterSvPV_renewโ_renew, presentSvPV_setโ_set, presentSvPVXโ big X energySvPVxโ small x energySvPVX_constโ big X plus_constSvPVX_mutableโ big X plus_mutableSvPVx_nolen_constโ small x and then everything else ๐ญSvPVXxโ the double-x situation, legendarySvREADONLYโ and that's the last one in this part, all caps, closing us out like the queen she is ๐
okay that's the chunk done bestie ๐ the source lists these as names only โ no blurbs, no params, no return values โ so I'm not about to sit here and invent lore, that's not the move ๐ซฃ anything marked (undocumented) genuinely has no entry in the page, and (DEPRECATED) means the page says deprecated, so treat that as a warning, not a vibe ๐ธ
more coming in the next part, don't go anywhere โจ
โฆand we're back, bestie ๐ still deep in the list, still thriving. Grab a snack, this stretch is a lot of names but every single one is here, promise ๐ซถ
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_NNsv_reftype,sv_replace,sv_report_used,sv_reset,SvROK,SvROK_off,SvROK_on,SvRV,SvRV_set,SvRX,SvRXOKsv_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_mgSvSHARED_HASH,SV_SMAGIC,SvSTASH,SvSTASH_set,SVs_TEMP,SvTAINTSVt_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_PVNVSvTRUE,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
Heads up ๐ธ:SV_UTF8_NO_ENCODINGandSvUVXxare both flagged DEPRECATED in the original list โ so the vibe is "it's giving retired icon", not "use me".
switch_to_global_locale,sync_locale,taint_env(undocumented),taint_proper(undocumented),TARG,THIS,Time_t,toLOWER,toUPPERUid_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,UVxfVAL_EAGAIN,VAL_O_NONBLOCK,vload_module,vwarnWARN_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_VOIDwhichsig,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_BOOTCHECKZero,ZeroD
And that's the whole alphabetical marathon done, we ate ๐ฅ
๐ฆ Backported version unknown
Okay so this next little pile is the "we literally don't know which version this landed in" club โ the manpage just files them here under the heading Backported version unknown. Every one of these also carries the (undocumented) tag, so keep that in mind, bestie ๐
LC_NUMERIC_LOCK(undocumented)LC_NUMERIC_UNLOCK(undocumented)LOCK_NUMERIC_STANDARD(undocumented)NUM2PTR(undocumented)PERLIO_FUNCS_CAST(undocumented)PERLIO_FUNCS_DECL(undocumented)PERL_STACK_OFFSET_DEFINED(undocumented)PERL_STACK_REALIGN(undocumented)Stack_off_t(undocumented)Stack_off_t_MAX(undocumented)STORE_LC_NUMERIC_SET_STANDARD(undocumented)STORE_NUMERIC_SET_STANDARD(undocumented)SvPV_flags_const_nolen(undocumented)SvVSTRING(undocumented)UNLOCK_NUMERIC_STANDARD(undocumented)XSPROTO(undocumented)
๐ BUGS
Found a bug? Devel::PPPort refusing to build on your system? A test throwing hands? ๐ญ Please send a bug report to <https://github.com/Dual-Life/Devel-PPPort/issues/new> โ that's literally it, that's the whole ask ๐
๐ 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
Like, a whole relay race of legends handing off the baton ๐โโ๏ธโจ
๐ 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 whole page, bestie โ you made it to the end, main character energy fr fr ๐๐
This copy is perl v5.42.3, dated 2026-11-03, page Devel::PPPort(3pm) โ go forth and write some unhinged-but-correct XS ๐ฆ๐โจ
๐ฆ where this page comes from
- alpine 3.24: perl-doc 5.42.3-r0 ยท Artistic-1.0-Perl 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