Ouroboros - Perl XS macros re-exported as C functions
libouroboros is a library of C functions wrapping XS macros. This package provides pointers to these functions, so Perl programs can have access to internal Perl methods (e.g. SvIV) at run-time. In combination with a JIT- compiler it allows Perl programs to build XS-like subroutines completely at run-time, without the need for a C compiler or a build environment.
All wrappers accept thread context as a first argument, as defined by pTHX XS macro, even if pTHX is not part of the wrapped macro definition.
Two exceptions to this are ouroboros_sys_init3 and ouroboros_sys_term, since they are called in embedded Perl scenario at times when Perl interpreter object does not exist.
ouroboros_sys_init3
ouroboros_sys_term
libouroboros encapsulates local stack state kept by XS inside the stack object: ouroboros_stack_t type and a number of method functions. Storage can be allocated on caller's stack or in heap, and should be initialized first by calling ouroboros_stack_init().
libouroboros
ouroboros_stack_t
ouroboros_stack_init()
Minimum storage size for ouroboros_stack_t is available as $Ouroboros::SIZE_OF{ouroboros_stack_t}. Exact layout is intentionally unspecified, user program should treat this type as an opaque object and only use provided methods to manipulate it.
$Ouroboros::SIZE_OF{ouroboros_stack_t}
Sizes for most primitive data types used by Perl are available via Config and supplemented by %Ouroboros::SIZE_OF hash.
%Ouroboros::SIZE_OF
See "ouroboros_xcpt_try" and "ouroboros_xcpt_rethrow".
Nothing is exported by default.
:all tag exports all methods and constants.
:all
:consts tag exports constants only.
:consts
Every sub listed here returns a pointer to a C function with a signature as provided.
OUROBOROS_STATIC void ouroboros_stack_init(pTHX_ ouroboros_stack_t*);
Initialize ouroboros_stack_t object. Must be first thing called by a XS-sub. Equivalent to dXSARGS macro automatically inserted by xsubpp into every XS sub.
dXSARGS
xsubpp
OUROBOROS_STATIC int ouroboros_stack_items(pTHX_ ouroboros_stack_t*);
Returns number of arguments on Perl stack. Equivalent to items local variable in XS.
items
OUROBOROS_STATIC void ouroboros_stack_putback(pTHX_ ouroboros_stack_t*);
Perl macro: PUTBACK
PUTBACK
OUROBOROS_STATIC SV* ouroboros_stack_fetch(pTHX_ ouroboros_stack_t*, SSize_t);
Read a value from the stack. Equivalent of:
return ST(a);
Perl macro: ST(n)
ST(n)
OUROBOROS_STATIC void ouroboros_stack_store(pTHX_ ouroboros_stack_t*, SSize_t, SV*);
Store a value on the stack. Equivalent of:
ST(a) = sv;
Perl macro: ST
ST
OUROBOROS_STATIC void ouroboros_stack_extend(pTHX_ ouroboros_stack_t*, SSize_t);
Perl macro: EXTEND
EXTEND
OUROBOROS_STATIC void ouroboros_stack_pushmark(pTHX_ ouroboros_stack_t*);
Perl macro: PUSHMARK
PUSHMARK
OUROBOROS_STATIC void ouroboros_stack_spagain(pTHX_ ouroboros_stack_t*);
Perl macro: SPAGAIN
SPAGAIN
OUROBOROS_STATIC void ouroboros_stack_xpush_sv(pTHX_ ouroboros_stack_t*, SV*);
Perl macro: XPUSHs
XPUSHs
OUROBOROS_STATIC void ouroboros_stack_xpush_sv_mortal(pTHX_ ouroboros_stack_t*, SV*);
Perl macro: mXPUSHs
mXPUSHs
OUROBOROS_STATIC void ouroboros_stack_xpush_iv(pTHX_ ouroboros_stack_t*, IV);
Perl macro: mXPUSHi
mXPUSHi
OUROBOROS_STATIC void ouroboros_stack_xpush_uv(pTHX_ ouroboros_stack_t*, UV);
Perl macro: mXPUSHu
mXPUSHu
OUROBOROS_STATIC void ouroboros_stack_xpush_nv(pTHX_ ouroboros_stack_t*, NV);
Perl macro: mXPUSHn
mXPUSHn
OUROBOROS_STATIC void ouroboros_stack_xpush_pv(pTHX_ ouroboros_stack_t*, const char*, STRLEN);
Perl macro: mXPUSHp
mXPUSHp
OUROBOROS_STATIC void ouroboros_stack_xpush_mortal(pTHX_ ouroboros_stack_t*);
Perl macro: XPUSHmortal
XPUSHmortal
OUROBOROS_STATIC void ouroboros_stack_push_sv(pTHX_ ouroboros_stack_t*, SV*);
Perl macro: PUSHs
PUSHs
OUROBOROS_STATIC void ouroboros_stack_push_sv_mortal(pTHX_ ouroboros_stack_t*, SV*);
Perl macro: mPUSHs
mPUSHs
OUROBOROS_STATIC void ouroboros_stack_push_iv(pTHX_ ouroboros_stack_t*, IV);
Perl macro: mPUSHi
mPUSHi
OUROBOROS_STATIC void ouroboros_stack_push_uv(pTHX_ ouroboros_stack_t*, UV);
Perl macro: mPUSHu
mPUSHu
OUROBOROS_STATIC void ouroboros_stack_push_nv(pTHX_ ouroboros_stack_t*, NV);
Perl macro: mPUSHn
mPUSHn
OUROBOROS_STATIC void ouroboros_stack_push_pv(pTHX_ ouroboros_stack_t*, const char*, STRLEN);
Perl macro: mPUSHp
mPUSHp
OUROBOROS_STATIC void ouroboros_stack_push_mortal(pTHX_ ouroboros_stack_t*);
Perl macro: PUSHmortal
PUSHmortal
OUROBOROS_STATIC void ouroboros_sv_upgrade(pTHX_ SV*, svtype);
Perl macro: SvUPGRADE
SvUPGRADE
OUROBOROS_STATIC U32 ouroboros_sv_niok(pTHX_ SV*);
Perl macro: SvNIOK
SvNIOK
OUROBOROS_STATIC U32 ouroboros_sv_niok_priv(pTHX_ SV*);
Perl macro: SvNIOKp
SvNIOKp
OUROBOROS_STATIC void ouroboros_sv_niok_off(pTHX_ SV*);
Perl macro: SvNIOK_off
SvNIOK_off
OUROBOROS_STATIC U32 ouroboros_sv_ok(pTHX_ SV*);
Perl macro: SvOK
SvOK
OUROBOROS_STATIC U32 ouroboros_sv_iok_priv(pTHX_ SV*);
Perl macro: SvIOKp
SvIOKp
OUROBOROS_STATIC U32 ouroboros_sv_nok_priv(pTHX_ SV*);
Perl macro: SvNOKp
SvNOKp
OUROBOROS_STATIC U32 ouroboros_sv_pok_priv(pTHX_ SV*);
Perl macro: SvPOKp
SvPOKp
OUROBOROS_STATIC U32 ouroboros_sv_iok(pTHX_ SV*);
Perl macro: SvIOK
SvIOK
OUROBOROS_STATIC void ouroboros_sv_iok_on(pTHX_ SV*);
Perl macro: SvIOK_on
SvIOK_on
OUROBOROS_STATIC void ouroboros_sv_iok_off(pTHX_ SV*);
Perl macro: SvIOK_off
SvIOK_off
OUROBOROS_STATIC void ouroboros_sv_iok_only(pTHX_ SV*);
Perl macro: SvIOK_only
SvIOK_only
OUROBOROS_STATIC void ouroboros_sv_iok_only_uv(pTHX_ SV*);
Perl macro: SvIOK_only_UV
SvIOK_only_UV
OUROBOROS_STATIC bool ouroboros_sv_iok_uv(pTHX_ SV*);
Perl macro: SvIOK_UV
SvIOK_UV
OUROBOROS_STATIC bool ouroboros_sv_uok(pTHX_ SV*);
Perl macro: SvUOK
SvUOK
OUROBOROS_STATIC bool ouroboros_sv_iok_not_uv(pTHX_ SV*);
Perl macro: SvIOK_notUV
SvIOK_notUV
OUROBOROS_STATIC U32 ouroboros_sv_nok(pTHX_ SV*);
Perl macro: SvNOK
SvNOK
OUROBOROS_STATIC void ouroboros_sv_nok_on(pTHX_ SV*);
Perl macro: SvNOK_on
SvNOK_on
OUROBOROS_STATIC void ouroboros_sv_nok_off(pTHX_ SV*);
Perl macro: SvNOK_off
SvNOK_off
OUROBOROS_STATIC void ouroboros_sv_nok_only(pTHX_ SV*);
Perl macro: SvNOK_only
SvNOK_only
OUROBOROS_STATIC U32 ouroboros_sv_pok(pTHX_ SV*);
Perl macro: SvPOK
SvPOK
OUROBOROS_STATIC void ouroboros_sv_pok_on(pTHX_ SV*);
Perl macro: SvPOK_on
SvPOK_on
OUROBOROS_STATIC void ouroboros_sv_pok_off(pTHX_ SV*);
Perl macro: SvPOK_off
SvPOK_off
OUROBOROS_STATIC void ouroboros_sv_pok_only(pTHX_ SV*);
Perl macro: SvPOK_only
SvPOK_only
OUROBOROS_STATIC void ouroboros_sv_pok_only_utf8(pTHX_ SV*);
Perl macro: SvPOK_only_UTF8
SvPOK_only_UTF8
OUROBOROS_STATIC bool ouroboros_sv_vok(pTHX_ SV*);
Perl macro: SvVOK
SvVOK
OUROBOROS_STATIC U32 ouroboros_sv_ook(pTHX_ SV*);
Perl macro: SvOOK
SvOOK
OUROBOROS_STATIC void ouroboros_sv_ook_offset(pTHX_ SV*, STRLEN*);
Perl macro: SvOOK_offset
SvOOK_offset
OUROBOROS_STATIC U32 ouroboros_sv_rok(pTHX_ SV*);
Perl macro: SvROK
SvROK
OUROBOROS_STATIC void ouroboros_sv_rok_on(pTHX_ SV*);
Perl macro: SvROK_on
SvROK_on
OUROBOROS_STATIC void ouroboros_sv_rok_off(pTHX_ SV*);
Perl macro: SvROK_off
SvROK_off
OUROBOROS_STATIC IV ouroboros_sv_iv(pTHX_ SV*);
Perl macro: SvIV
SvIV
OUROBOROS_STATIC IV ouroboros_sv_iv_nomg(pTHX_ SV*);
Perl macro: SvIV_nomg
SvIV_nomg
OUROBOROS_STATIC IV ouroboros_sv_iv_raw(pTHX_ SV*);
Perl macro: SvIVX
SvIVX
OUROBOROS_STATIC void ouroboros_sv_iv_set(pTHX_ SV*, IV);
Perl macro: SvIV_set
SvIV_set
OUROBOROS_STATIC UV ouroboros_sv_uv(pTHX_ SV*);
Perl macro: SvUV
SvUV
OUROBOROS_STATIC UV ouroboros_sv_uv_nomg(pTHX_ SV*);
Perl macro: SvUV_nomg
SvUV_nomg
OUROBOROS_STATIC UV ouroboros_sv_uv_raw(pTHX_ SV*);
Perl macro: SvUVX
SvUVX
OUROBOROS_STATIC void ouroboros_sv_uv_set(pTHX_ SV*, UV);
Perl macro: SvUV_set
SvUV_set
OUROBOROS_STATIC NV ouroboros_sv_nv(pTHX_ SV*);
Perl macro: SvNV
SvNV
OUROBOROS_STATIC NV ouroboros_sv_nv_nomg(pTHX_ SV*);
Perl macro: SvNV_nomg
SvNV_nomg
OUROBOROS_STATIC NV ouroboros_sv_nv_raw(pTHX_ SV*);
Perl macro: SvNVX
SvNVX
OUROBOROS_STATIC void ouroboros_sv_nv_set(pTHX_ SV*, NV);
Perl macro: SvNV_set
SvNV_set
OUROBOROS_STATIC const char* ouroboros_sv_pv(pTHX_ SV*, STRLEN*);
Perl macro: SvPV
SvPV
OUROBOROS_STATIC const char* ouroboros_sv_pv_nomg(pTHX_ SV*, STRLEN*);
Perl macro: SvPV_nomg
SvPV_nomg
OUROBOROS_STATIC const char* ouroboros_sv_pv_nolen(pTHX_ SV*);
Perl macro: SvPV_nolen
SvPV_nolen
OUROBOROS_STATIC const char* ouroboros_sv_pv_nomg_nolen(pTHX_ SV*);
Perl macro: SvPV_nomg_nolen
SvPV_nomg_nolen
OUROBOROS_STATIC char* ouroboros_sv_pv_raw(pTHX_ SV*);
Perl macro: SvPVX
SvPVX
OUROBOROS_STATIC STRLEN ouroboros_sv_pv_cur(pTHX_ SV*);
Perl macro: SvCUR
SvCUR
OUROBOROS_STATIC void ouroboros_sv_pv_cur_set(pTHX_ SV*, STRLEN);
Perl macro: SvCUR_set
SvCUR_set
OUROBOROS_STATIC STRLEN ouroboros_sv_pv_len(pTHX_ SV*);
Perl macro: SvLEN
SvLEN
OUROBOROS_STATIC void ouroboros_sv_pv_len_set(pTHX_ SV*, STRLEN);
Perl macro: SvLEN_set
SvLEN_set
OUROBOROS_STATIC char* ouroboros_sv_pv_end(pTHX_ SV*);
Perl macro: SvEND
SvEND
OUROBOROS_STATIC SV* ouroboros_sv_rv(pTHX_ SV*);
Perl macro: SvRV
SvRV
OUROBOROS_STATIC void ouroboros_sv_rv_set(pTHX_ SV*, SV*);
Perl macro: SvRV_set
SvRV_set
OUROBOROS_STATIC bool ouroboros_sv_true(pTHX_ SV*);
Perl macro: SvTRUE
SvTRUE
OUROBOROS_STATIC bool ouroboros_sv_true_nomg(pTHX_ SV*);
Perl macro: SvTRUE_nomg
SvTRUE_nomg
OUROBOROS_STATIC svtype ouroboros_sv_type(pTHX_ SV*);
Perl macro: SvTYPE
SvTYPE
OUROBOROS_STATIC UV ouroboros_sv_flags(pTHX_ SV*);
Perl macro: SvFLAGS
SvFLAGS
OUROBOROS_STATIC bool ouroboros_sv_utf8(pTHX_ SV*);
Perl macro: SvUTF8
SvUTF8
OUROBOROS_STATIC void ouroboros_sv_utf8_on(pTHX_ SV*);
Perl macro: SvUTF8_on
SvUTF8_on
OUROBOROS_STATIC void ouroboros_sv_utf8_off(pTHX_ SV*);
Perl macro: SvUTF8_off
SvUTF8_off
OUROBOROS_STATIC U32 ouroboros_sv_is_cow(pTHX_ SV*);
Perl macro: SvIsCOW
SvIsCOW
OUROBOROS_STATIC bool ouroboros_sv_is_cow_shared_hash(pTHX_ SV*);
Perl macro: SvIsCOW_shared_hash
SvIsCOW_shared_hash
OUROBOROS_STATIC bool ouroboros_sv_tainted(pTHX_ SV*);
Perl macro: SvTAINTED
SvTAINTED
OUROBOROS_STATIC void ouroboros_sv_tainted_on(pTHX_ SV*);
Perl macro: SvTAINTED_on
SvTAINTED_on
OUROBOROS_STATIC void ouroboros_sv_tainted_off(pTHX_ SV*);
Perl macro: SvTAINTED_off
SvTAINTED_off
OUROBOROS_STATIC void ouroboros_sv_taint(pTHX_ SV*);
Perl macro: SvTAINT
SvTAINT
OUROBOROS_STATIC void ouroboros_sv_share(pTHX_ SV*);
Perl macro: SvSHARE
SvSHARE
OUROBOROS_STATIC void ouroboros_sv_lock(pTHX_ SV*);
Perl macro: SvLOCK
SvLOCK
OUROBOROS_STATIC void ouroboros_sv_unlock(pTHX_ SV*);
Perl macro: SvUNLOCK
SvUNLOCK
OUROBOROS_STATIC U32 ouroboros_sv_get_a_magic(pTHX_ SV*);
Perl macro: SvGAMAGIC
SvGAMAGIC
OUROBOROS_STATIC void ouroboros_sv_magic_set(pTHX_ SV*, MAGIC*);
Perl macro: SvMAGIC_set
SvMAGIC_set
OUROBOROS_STATIC void ouroboros_sv_get_magic(pTHX_ SV*);
Perl macro: SvGETMAGIC
SvGETMAGIC
OUROBOROS_STATIC void ouroboros_sv_set_magic(pTHX_ SV*);
Perl macro: SvSETMAGIC
SvSETMAGIC
OUROBOROS_STATIC SV* ouroboros_gv_sv(pTHX_ GV*);
Perl macro: GvSV
GvSV
OUROBOROS_STATIC AV* ouroboros_gv_av(pTHX_ GV*);
Perl macro: GvAV
GvAV
OUROBOROS_STATIC HV* ouroboros_gv_hv(pTHX_ GV*);
Perl macro: GvHV
GvHV
OUROBOROS_STATIC CV* ouroboros_gv_cv(pTHX_ CV*);
Perl macro: GvCV
GvCV
OUROBOROS_STATIC HV* ouroboros_sv_stash(pTHX_ SV*);
Perl macro: SvSTASH
SvSTASH
OUROBOROS_STATIC void ouroboros_sv_stash_set(pTHX_ SV*, HV*);
Perl macro: SvSTASH_set
SvSTASH_set
OUROBOROS_STATIC HV* ouroboros_cv_stash(pTHX_ CV*);
Perl macro: CvSTASH
CvSTASH
OUROBOROS_STATIC const char* ouroboros_hv_name(pTHX_ HV*);
Perl macro: HvNAME
HvNAME
OUROBOROS_STATIC STRLEN ouroboros_hv_name_len(pTHX_ HV*);
Perl macro: HvNAMELEN
HvNAMELEN
OUROBOROS_STATIC unsigned char ouroboros_hv_name_utf8(pTHX_ HV*);
Perl macro: HvNAMEUTF8
HvNAMEUTF8
OUROBOROS_STATIC const char* ouroboros_hv_ename(pTHX_ HV*);
Perl macro: HvENAME
HvENAME
OUROBOROS_STATIC STRLEN ouroboros_hv_ename_len(pTHX_ HV*);
Perl macro: HvENAMELEN
HvENAMELEN
OUROBOROS_STATIC unsigned char ouroboros_hv_ename_utf8(pTHX_ HV*);
Perl macro: HvENAMEUTF8
HvENAMEUTF8
OUROBOROS_STATIC const char* ouroboros_he_pv(pTHX_ HE*, STRLEN*);
Perl macro: HePV
HePV
OUROBOROS_STATIC SV* ouroboros_he_val(pTHX_ HE*);
Perl macro: HeVAL
HeVAL
OUROBOROS_STATIC U32 ouroboros_he_hash(pTHX_ HE*);
Perl macro: HeHASH
HeHASH
OUROBOROS_STATIC SV* ouroboros_he_svkey(pTHX_ HE*);
Perl macro: HeSVKEY
HeSVKEY
OUROBOROS_STATIC SV* ouroboros_he_svkey_force(pTHX_ HE*);
Perl macro: HeSVKEY_force
HeSVKEY_force
OUROBOROS_STATIC SV* ouroboros_he_svkey_set(pTHX_ HE*, SV*);
Perl macro: HeSVKEY_set
HeSVKEY_set
OUROBOROS_STATIC U32 ouroboros_perl_hash(pTHX_ U8*, STRLEN);
Unlike macro, returns hash value instead of assigning it to an argument.
Perl macro: PERL_HASH
PERL_HASH
OUROBOROS_STATIC U32 ouroboros_sv_refcnt(pTHX_ SV*);
Perl macro: SvREFCNT
SvREFCNT
OUROBOROS_STATIC SV* ouroboros_sv_refcnt_inc(pTHX_ SV*);
Perl macro: SvREFCNT_inc_simple
SvREFCNT_inc_simple
OUROBOROS_STATIC SV* ouroboros_sv_refcnt_inc_nn(pTHX_ SV*);
Perl macro: SvREFCNT_inc_simple_NN
SvREFCNT_inc_simple_NN
OUROBOROS_STATIC void ouroboros_sv_refcnt_inc_void(pTHX_ SV*);
Perl macro: SvREFCNT_inc_simple_void
SvREFCNT_inc_simple_void
OUROBOROS_STATIC void ouroboros_sv_refcnt_inc_void_nn(pTHX_ SV*);
Perl macro: SvREFCNT_inc_simple_void_NN
SvREFCNT_inc_simple_void_NN
OUROBOROS_STATIC void ouroboros_sv_refcnt_dec(pTHX_ SV*);
Perl macro: SvREFCNT_dec
SvREFCNT_dec
OUROBOROS_STATIC void ouroboros_sv_refcnt_dec_nn(pTHX_ SV*);
Perl macro: SvREFCNT_dec_NN
SvREFCNT_dec_NN
OUROBOROS_STATIC void ouroboros_enter(pTHX);
Perl macro: ENTER
ENTER
OUROBOROS_STATIC void ouroboros_leave(pTHX);
Perl macro: LEAVE
LEAVE
OUROBOROS_STATIC void ouroboros_savetmps(pTHX);
Perl macro: SAVETMPS
SAVETMPS
OUROBOROS_STATIC void ouroboros_freetmps(pTHX);
Perl macro: FREETMPS
FREETMPS
OUROBOROS_STATIC void ouroboros_sys_init3(int*, char***, char***);
Perl macro: PERL_SYS_INIT3
PERL_SYS_INIT3
OUROBOROS_STATIC void ouroboros_sys_term();
Perl macro: PERL_SYS_TERM
PERL_SYS_TERM
OUROBOROS_STATIC SV* ouroboros_sv_undef(pTHX);
Return address of PL_sv_undef global.
PL_sv_undef
OUROBOROS_STATIC SV* ouroboros_sv_no(pTHX);
Return address of PL_sv_no global.
PL_sv_no
OUROBOROS_STATIC SV* ouroboros_sv_yes(pTHX);
Return address of PL_sv_yes global.
PL_sv_yes
OUROBOROS_STATIC U32 ouroboros_gimme(pTHX);
Perl macro: GIMME_V
GIMME_V
OUROBOROS_STATIC int ouroboros_xcpt_try(pTHX_ ouroboros_xcpt_callback_t, void*);
Execute callback once while capturing Perl exceptions. Second argument is passed to the callback as is and can be NULL.
This is equivalent of XCPT_TRY_START and XCPT_TRY_END macros, see "Exception Handling" in perlguts.
XCPT_TRY_START
XCPT_TRY_END
Returns zero if callback was executed successfully and no Perl exceptions were thrown.
Returns non-zero if Perl exception was thrown while executing callback. After doing cleanups, this value must be passed to "ouroboros_xcpt_rethrow".
Perl macro: XCPT_TRY_START and XCPT_TRY_END
OUROBOROS_STATIC void ouroboros_xcpt_rethrow(pTHX_ int);
Continue exception unwinding after unsuccessful call to "ouroboros_xcpt_try".
Perl macro: XCPT_RETHROW
XCPT_RETHROW
This package also provides a number of consants from XS API. Some constants may not be available, depending on the Perl version used.
@Ouroboros::CONSTS contains names of all constants provided by this package.
@Ouroboros::CONSTS
SVt_NULL
SVt_IV
SVt_NV
SVt_PV
SVt_PVIV
SVt_PVNV
SVt_PVMG
SVt_REGEXP
SVt_PVGV
SVt_PVLV
SVt_PVAV
SVt_PVHV
SVt_PVCV
SVt_PVFM
SVt_PVIO
SVt_LAST
SV_CATBYTES
SV_CATUTF8
SV_CONST_RETURN
SV_COW_DROP_PV
SV_FORCE_UTF8_UPGRADE
SV_GMAGIC
SV_HAS_TRAILING_NUL
SV_IMMEDIATE_UNREF
SV_NOSTEAL
SV_SMAGIC
GV_ADD
GV_ADDMG
GV_ADDMULTI
GV_NOADD_NOINIT
GV_NOEXPAND
GV_NOINIT
GV_SUPER
PERL_MAGIC_arylen
PERL_MAGIC_arylen_p
PERL_MAGIC_backref
PERL_MAGIC_bm
PERL_MAGIC_checkcall
PERL_MAGIC_collxfrm
PERL_MAGIC_dbfile
PERL_MAGIC_dbline
PERL_MAGIC_debugvar
PERL_MAGIC_defelem
PERL_MAGIC_env
PERL_MAGIC_envelem
PERL_MAGIC_ext
PERL_MAGIC_fm
PERL_MAGIC_foo
PERL_MAGIC_hints
PERL_MAGIC_hintselem
PERL_MAGIC_isa
PERL_MAGIC_isaelem
PERL_MAGIC_lvref
PERL_MAGIC_nkeys
PERL_MAGIC_overload_table
PERL_MAGIC_pos
PERL_MAGIC_qr
PERL_MAGIC_regdata
PERL_MAGIC_regdatum
PERL_MAGIC_regex_global
PERL_MAGIC_rhash
PERL_MAGIC_shared
PERL_MAGIC_shared_scalar
PERL_MAGIC_sig
PERL_MAGIC_sigelem
PERL_MAGIC_substr
PERL_MAGIC_sv
PERL_MAGIC_symtab
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
Most of the XS API consists of normal functions and their addresses can be discovered via DynaLoader at run-time with little effort. See "Internal Functions" in perlguts for more information.
Perl extensive XS documentation: perlxs, perlapi, perlguts.
JIT-compiler libraries for Perl: LibJIT, GCCJIT.
Vickenty Fesunov, <cpan-ouroboros@setattr.net>
Copyright (c) 2016 Vickenty Fesunov. All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
To install Ouroboros, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Ouroboros
CPAN shell
perl -MCPAN -e shell install Ouroboros
For more information on module installation, please visit the detailed CPAN module installation guide.