Some years ago I introduced a kludge in embed.fnc to mark a function as experimental to keep it out of perlapi, so that it was less likely to be used by people outside core. I now realize it would have been better to have a new flag to indicate that the item was intended only for core use. (ISTR sprout realized that some time ago, but after the change had already been made) I am now in the process of making this new flag. I have found many functions that I'm confident were marked experimental only for the purposes I mentioned above, but there are another 150 that I'm unsure of. Please examine the list below and let me know your take on them. You can use #irc to avoid the email overhead if you wish. I think that after this is done, anything that is still marked as experimental and part of the API should go in perlapi. This would catch the new parse_subsignature() function properly, as I believe it's designed for XS writers, but has to be marked as experimental. Apx |void |apply_attrs_string|NN const char *stashpv|NN CV *cv|NN const char *attrstr|STRLEN len Apdoex |void |av_create_and_push|NN AV **const avp|NN SV *const val Apdoex |SV** |av_create_and_unshift_one|NN AV **const avp|NN SV *const val Aodxp |void |blockhook_register |NN BHK *hk px |void |create_eval_scope|NULLOK OP *retop|U32 flags ExXp |void |cv_ckproto_len_flags |NN const CV* cv|NULLOK const GV* gv\ px |void |delete_eval_scope xp |bool |do_open_raw |NN GV *gv|NN const char *oname|STRLEN len \ xp |bool |do_open6 |NN GV *gv|NN const char *oname|STRLEN len \ Apx |GV* |gv_fetchmethod_sv_flags|NN HV* stash|NN SV* namesv|U32 flags Apx |GV* |gv_fetchmethod_pv_flags|NN HV* stash|NN const char* name \ Apx |GV* |gv_fetchmethod_pvn_flags|NN HV* stash|NN const char* name \ pxoe |GP * |newGP |NN GV *const gv Xxpd |void |gv_try_downgrade|NN GV* gv ApxdR |HE* |hv_iternext_flags|NN HV *hv|I32 flags Apbmx |SV** |hv_store_flags |NULLOK HV *hv|NULLOK const char *key \ AbDxpR |bool |is_utf8_mark |NN const U8 *p Axpd |void |lex_start |NULLOK SV* line|NULLOK PerlIO *rsfp|U32 flags Axpd |bool |lex_bufutf8 Axpd |char* |lex_grow_linestr|STRLEN len Axpd |void |lex_stuff_pvn |NN const char* pv|STRLEN len|U32 flags Axpd |void |lex_stuff_pv |NN const char* pv|U32 flags Axpd |void |lex_stuff_sv |NN SV* sv|U32 flags Axpd |void |lex_unstuff |NN char* ptr Axpd |void |lex_read_to |NN char* ptr Axpd |void |lex_discard_to |NN char* ptr Axpd |bool |lex_next_chunk |U32 flags Axpd |I32 |lex_peek_unichar|U32 flags Axpd |I32 |lex_read_unichar|U32 flags Axpd |void |lex_read_space |U32 flags Axpd |OP* |parse_arithexpr|U32 flags Axpd |OP* |parse_termexpr |U32 flags Axpd |OP* |parse_listexpr |U32 flags Axpd |OP* |parse_fullexpr |U32 flags Axpd |OP* |parse_block |U32 flags Axpd |OP* |parse_barestmt |U32 flags Axpd |SV* |parse_label |U32 flags Axpd |OP* |parse_fullstmt |U32 flags Axpd |OP* |parse_stmtseq |U32 flags Axpd |OP* |parse_subsignature|U32 flags Axmd |OP* |op_lvalue |NULLOK OP* o|I32 type px |LOGOP* |alloc_LOGOP |I32 type|NULLOK OP *first|NULLOK OP *other Apx |CV * |newXS_flags |NULLOK const char *name|NN XSUBADDR_t subaddr\ AxpdRT |PADNAME *|newPADNAMEouter|NN PADNAME *outer AxpdRT |PADNAME *|newPADNAMEpvn|NN const char *s|STRLEN len AxpdRT |PADNAMELIST *|newPADNAMELIST|size_t max Axpd |void |wrap_keyword_plugin|NN Perl_keyword_plugin_t new_plugin|NN Perl_keyword_plugin_t *old_plugin_p xp |OP* |op_unscope |NULLOK OP* o Adxp |PADOFFSET|alloccopstash|NN HV *hv dopx |PerlIO*|start_glob |NN SV *tmpglob|NN IO *io ApxT |void |thread_locale_init ApxT |void |thread_locale_term Axpo |void |savetmps Axpd |OP* |op_scope |NULLOK OP* o pxd |SV* |sv_2num |NN SV *const sv poxX |void |sv_free2 |NN SV *const sv|const U32 refcnt Apxd |U8* |utf8_to_bytes |NN U8 *s|NN STRLEN *lenp AMxdp |U8* |bytes_from_utf8|NN const U8 *s|NN STRLEN *lenp|NN bool *is_utf8p AxTp |U8* |bytes_from_utf8_loc|NN const U8 *s \ Apxd |U8* |bytes_to_utf8 |NN const U8 *s|NN STRLEN *lenp AxTdi |UV |utf8n_to_uvchr_msgs|NN const U8 *s \ Admx |U8* |uvchr_to_utf8_flags_msgs|NN U8 *d|UV uv|UV flags|NULLOK HV ** msgs ATpxd |SV* |sv_get_backrefs|NN SV *const sv Sx |SV* |hv_delete_common|NULLOK HV *hv|NULLOK SV *keysv \ Sx |void |clear_placeholders |NN HV *hv|U32 items poex |OP * |op_refcnt_inc |NULLOK OP *o poex |PADOFFSET |op_refcnt_dec |NN OP *o pox |void |sv_kill_backrefs |NN SV *const sv|NULLOK AV *const av EXpxR |char* |scan_str |NN char *start|int keep_quoted \ EXpx |char* |scan_word |NN char *s|NN char *dest|STRLEN destlen \ EXpxR |char* |skipspace_flags|NN char *s|U32 flags EdXxp |bool |validate_proto |NN SV *name|NULLOK SV *proto|bool warn \ Axpd |PADOFFSET|pad_alloc |I32 optype|U32 tmptype Axpd |void |pad_tidy |padtidy_type type AxpdRT |PADNAME *|padnamelist_fetch|NN PADNAMELIST *pnl|SSize_t key Axpd |PADNAME **|padnamelist_store|NN PADNAMELIST *pnl|SSize_t key \ ApdRx |SV* |hv_bucket_ratio|NN HV *hv pox |AV** |hv_backreferences_p |NN HV *hv pox |void |hv_kill_backrefs |NN HV *hv Sxd |SV* |find_uninit_var|NULLOK const OP *const obase \ XEopxR |STRLEN *|new_warnings_bitfield|NULLOK STRLEN *buffer \ AxdToP |int |Perl_signbit |NV f XExop |void |emulate_cop_io |NN const COP *const c|NN SV *const sv XExop |REGEXP *|get_re_arg|NULLOK SV *sv AMpxd |const char *|cop_fetch_label|NN COP *const cop dAmxz|void|BhkDISABLE|BHK *hk|which dAmxz|void|BhkENABLE|BHK *hk|which dmxz|void *|BhkENTRY|BHK *hk|which dAmxz|void|BhkENTRY_set|BHK *hk|which|void *ptr dmx|U32|BhkFLAGS|BHK *hk dmxz|void|CALL_BLOCK_HOOKS|which|arg dAmx|HV *|cophh_2hv|const COPHH *cophh|U32 flags dAmx|COPHH *|cophh_copy|COPHH *cophh dAmx|COPHH *|cophh_delete_pv|const COPHH *cophh|const char *key|U32 hash|U32 flags dAmx|COPHH *|cophh_delete_pvn|COPHH *cophh|const char *keypv|STRLEN keylen|U32 hash|U32 flags dAmx|COPHH *|cophh_delete_pvs|const COPHH *cophh|const char * const key|U32 flags dAmx|COPHH *|cophh_delete_sv|const COPHH *cophh|SV *key|U32 hash|U32 flags dAmx|SV *|cophh_fetch_pv|const COPHH *cophh|const char *key|U32 hash|U32 flags dAmx|SV *|cophh_fetch_pvn|const COPHH *cophh|const char *keypv|STRLEN keylen|U32 hash|U32 flags dAmx|SV *|cophh_fetch_pvs|const COPHH *cophh|const char * const key|U32 flags dAmx|SV *|cophh_fetch_sv|const COPHH *cophh|SV *key|U32 hash|U32 flags dAmx|void|cophh_free|COPHH *cophh dAmx|COPHH *|cophh_new_empty dAmx|COPHH *|cophh_store_pv|const COPHH *cophh|const char *key|U32 hash|SV *value|U32 flags dAmx|COPHH *|cophh_store_pvn|COPHH *cophh|const char *keypv|STRLEN keylen|U32 hash|SV *value|U32 flags dAmx|COPHH *|cophh_store_pvs|const COPHH *cophh|const char * const key|SV *value|U32 flags dAmx|COPHH *|cophh_store_sv|const COPHH *cophh|SV *key|U32 hash|SV *value|U32 flags dAmx|PADLIST *|CvPADLIST|CV *cv dAmx|void|lex_stuff_pvs|const char * const pv|U32 flags dAmx|SV*|newSVpadname|PADNAME *pn dAmx|SV **|PadARRAY|PAD * pad dAmx|PAD **|PadlistARRAY|PADLIST * padlist dAmx|SSize_t|PadlistMAX|PADLIST * padlist dAmx|PADNAME **|PadlistNAMESARRAY|PADLIST * padlist dAmx|SSize_t|PadlistNAMESMAX|PADLIST * padlist dAmx|PADNAMELIST *|PadlistNAMES|PADLIST * padlist dAmx|U32|PadlistREFCNT|PADLIST * padlist dAmx|SSize_t|PadMAX|PAD * pad dAmx|STRLEN|PadnameLEN|PADNAME * pn dAmx|PADNAME **|PadnamelistARRAY|PADNAMELIST * pnl dAmx|SSize_t|PadnamelistMAX|PADNAMELIST * pnl dAmx|void|PadnamelistREFCNT_dec|PADNAMELIST * pnl dAmx|SSize_t|PadnamelistREFCNT|PADNAMELIST * pnl dAmx|char *|PadnamePV|PADNAME * pn dAmx|void|PadnameREFCNT_dec|PADNAME * pn dAmx|SSize_t|PadnameREFCNT|PADNAME * pn dAmx|SV *|PadnameSV|PADNAME * pn dAmx|bool|PadnameUTF8|PADNAME * pn dAmnxU|PAD *|PL_comppad dAmnxU|PADNAMELIST *|PL_comppad_name dAmnxU|SV **|PL_curpad dAmnUx|Perl_keyword_plugin_t|PL_keyword_plugin AMpxd |void|cop_store_label \ Apx |void |leave_adjust_stacks|NN SV **from_sp|NN SV **to_sp \ Aix |PERL_CONTEXT * |cx_pushblock|U8 type|U8 gimme|NN SV** sp|I32 saveix Aix |void |cx_popblock|NN PERL_CONTEXT *cx Aix |void |cx_topblock|NN PERL_CONTEXT *cx Aix |void |cx_pushsub |NN PERL_CONTEXT *cx|NN CV *cv \ Aix |void |cx_popsub_common|NN PERL_CONTEXT *cx Aix |void |cx_popsub_args |NN PERL_CONTEXT *cx Aix |void |cx_popsub |NN PERL_CONTEXT *cx Aix |void |cx_pushformat |NN PERL_CONTEXT *cx|NN CV *cv \ Aix |void |cx_popformat |NN PERL_CONTEXT *cx Aix |void |cx_pusheval |NN PERL_CONTEXT *cx \ Aix |void |cx_popeval |NN PERL_CONTEXT *cx Aix |void |cx_pushloop_plain|NN PERL_CONTEXT *cx Aix |void |cx_pushloop_for |NN PERL_CONTEXT *cx \ Aix |void |cx_poploop |NN PERL_CONTEXT *cx Aix |void |cx_pushwhen |NN PERL_CONTEXT *cx Aix |void |cx_popwhen |NN PERL_CONTEXT *cx Aix |void |cx_pushgiven |NN PERL_CONTEXT *cx|NULLOK SV *orig_defsv Aix |void |cx_popgiven |NN PERL_CONTEXT *cxThread Next