+#ifdef PERL_HASH_RANDOMIZE_KEYS
+#ifdef USE_PERL_PERTURB_KEYS
+PERLVARI(I, hash_rand_bits_enabled, U8, 1) /* used to randomize hash stuff 0 == no-random, 1 == random, 2 == determinsitic */
+#endif
+PERLVARI(I, hash_rand_bits, UV, 0) /* used to randomize hash stuff */
+#endif
+PERLVAR(I, strtab, HV *) /* shared string table */
+/* prog counter for the currently executing OP_MULTIDEREF Used to signal
+ * to S_find_uninit_var() where we are */
+PERLVAR(I, multideref_pc, UNOP_AUX_item *)
+
+/* Fields used by magic variables such as $@, $/ and so on */
+PERLVAR(I, curpm, PMOP *) /* what to do \ interps in REs from */
+
+PERLVAR(I, tainting, bool) /* doing taint checks */
+PERLVARI(I, tainted, bool, FALSE) /* using variables controlled by $< */
+
+/* PL_delaymagic is currently used for two purposes: to assure simultaneous
+ * updates in ($<,$>) = ..., and to assure atomic update in push/unshift
+ * @ISA, It works like this: a few places such as pp_push set the DM_DELAY
+ * flag; then various places such as av_store() skip mg_set(ary) if this
+ * flag is set, and various magic vtable methods set flags like
+ * DM_ARRAY_ISA if they've seen something of that ilk. Finally when
+ * control returns to pp_push or whatever, it sees if any of those flags
+ * have been set, and if so finally calls mg_set().
+ *
+ * NB: PL_delaymagic is automatically saved and restored by JUMPENV_PUSH
+ * / POP. This removes the need to do ENTER/SAVEI16(PL_delaymagic)/LEAVE
+ * in hot code like pp_push.
+ */
+PERLVAR(I, delaymagic, U16) /* ($<,$>) = ... */
+
+PERLVAR(I, localizing, U8) /* are we processing a local() list? */
+PERLVAR(I, in_eval, U8) /* trap "fatal" errors? */
+PERLVAR(I, defgv, GV *) /* the *_ glob */
+/*
+
+=for apidoc mn|bool|PL_dowarn
+
+The C variable which corresponds to Perl's C<$^W> warning variable.
+
+=cut
+*/
+
+PERLVAR(I, dowarn, U8)
+
+#if defined (PERL_UTF8_CACHE_ASSERT) || defined (DEBUGGING)
+# define PERL___I -1
+#else
+# define PERL___I 1
+#endif
+PERLVARI(I, utf8cache, I8, PERL___I) /* Is the utf8 caching code enabled? */
+#undef PERL___I
+
+
+/* Stashes */
+PERLVAR(I, defstash, HV *) /* main symbol table */
+PERLVAR(I, curstash, HV *) /* symbol table for current package */
+
+PERLVAR(I, curcop, COP *)
+PERLVAR(I, curstack, AV *) /* THE STACK */
+PERLVAR(I, curstackinfo, PERL_SI *) /* current stack + context */
+PERLVAR(I, mainstack, AV *) /* the stack when nothing funny is
+ happening */
+
+/* memory management */
+PERLVAR(I, sv_count, IV) /* how many SV* are currently allocated */
+
+PERLVAR(I, sv_root, SV *) /* storage for SVs belonging to interp */
+PERLVAR(I, sv_arenaroot, SV *) /* list of areas for garbage collection */
+
+/* fake PMOP that PL_curpm points to while in (?{}) so $1 et al are visible */
+PERLVARI(I, reg_curpm, PMOP*, NULL)
+
+/* the currently active slab in a chain of slabs of regmatch states,
+ * and the currently active state within that slab. This stack of states
+ * is shared amongst re-entrant calls to the regex engine */
+
+PERLVARI(I, regmatch_slab, regmatch_slab *, NULL)
+PERLVAR(I, regmatch_state, regmatch_state *)
+
+PERLVAR(I, comppad, PAD *) /* storage for lexically scoped temporaries */
+
+/*
+=for apidoc Amn|SV|PL_sv_undef
+This is the C<undef> SV. Always refer to this as C<&PL_sv_undef>.
+
+=for apidoc Amn|SV|PL_sv_no
+This is the C<false> SV. See C<L</PL_sv_yes>>. Always refer to this as
+C<&PL_sv_no>.
+
+=for apidoc Amn|SV|PL_sv_yes
+This is the C<true> SV. See C<L</PL_sv_no>>. Always refer to this as
+C<&PL_sv_yes>.
+
+=cut
+*/
+
+PERLVAR(I, sv_undef, SV)
+PERLVAR(I, sv_no, SV)
+PERLVAR(I, sv_yes, SV)
+PERLVAR(I, padname_undef, PADNAME)
+PERLVAR(I, padname_const, PADNAME)