这是可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行的命令 perlintern,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器
程序:
您的姓名
perlintern - 纯内部 Perl 函数的自动生成文档
商品描述
此文件是 Perl 解释器中函数的自动生成文档,这些函数是
使用 Perl 的内部文档格式进行记录,但未标记为
Perl API。 换句话说, 他们 旨在 而不去 使用 in 扩展!
编译时间 范围 挂钩
登录
注意:此功能是实验性的,可能会更改或删除,恕不另行通知。
从 BHK 结构返回一个条目。 这 是一个预处理器令牌,表示
返回哪个条目。 如果未设置适当的标志,这将返回 NULL。
返回值的类型取决于您要求的条目。
void * BhkENTRY(BHK *hk, 其中)
标志
注意:此功能是实验性的,可能会更改或删除,恕不另行通知。
返回 BHK 的标志。
U32 BhkFLAGS(BHK *hk)
CALL_BLOCK_HOOKS
注意:此功能是实验性的,可能会更改或删除,恕不另行通知。
为 type 调用所有已注册的块钩子 这. 这 是预处理
令牌; 的类型 ARG 依赖于取决于 这.
void CALL_BLOCK_HOOKS(其中,arg)
定制 运营商
核心原型
此函数将命名的核心函数的原型分配给“sv”,或分配给
如果“sv”为NULL,则为新的凡人SV。 它返回修改后的“sv”,如果核心
函数没有原型。 “code”是“keyword()”返回的代码。 它必须
不等于0。
SV * core_prototype(SV *sv, const char *名称,
const int 代码,
int * const opnum)
CV 操作 功能
docatch 检查 cur_env.je_ret 的 case 0 或 3,仅在 eval 上下文中使用。
0 用作 eval 中的 continue,
3 用于被内部评估捕获的骰子 - 继续内部循环
参见 cop.h: je_mustcatch,当在任何运行级别设置为 TRUE 时,意味着 eval ops 必须
建立一个本地 jmpenv 来处理异常陷阱。
OP* 文档(OP *o)
CV 参考 计数 和 外侧
Cv弱外
每个 CV 都有一个指针“CvOUTSIDE()”,指向其词法封闭的 CV(如果有)。
因为指向匿名子原型的指针存储在“&”填充槽中,所以它是一个
可以得到一个循环引用,父指向子和
反之亦然。 为了避免随之而来的内存泄漏,我们不增加引用
“CvOUTSIDE”指向的简历的计数 一种 具体的 例 该
parent 有一个“&”填充槽指向我们。 在这种情况下,我们设置
子进程中的“CvWEAKOUTSIDE”标志。 这使我们能够确定在什么情况下
在这种情况下,我们应该在释放父对象时减少父对象的引用计数
儿童。
非封闭匿名订阅者(即那些
不要引用该子之外的任何词汇)。 在这种情况下,匿名
原型是共享的,而不是被克隆。 这导致
当仍有活跃的孩子时,父母可能会被释放,例如
开始 { $a = sub { eval '$x' } }
在这种情况下,BEGIN 在执行后立即被释放,因为没有
对它的主动引用:匿名子原型设置了“CvWEAKOUTSIDE”,因为它是
不是闭包,并且 $a 指向相同的 CV,因此它对 BEGIN 没有贡献
refcount 要么。 执行 $a 时,“eval '$x'”会导致链
遵循“CvOUTSIDE”,并访问释放的 BEGIN。
为避免这种情况,每当 CV 及其关联的 pad 被释放时,任何“&”条目
垫从垫上明确删除,如果指向的引用计数
anon sub 仍然是正的,那么那个孩子的“CvOUTSIDE”被设置为指向它的
祖父母。 这只会发生在非封闭的单一特定情况下
具有一个或多个活动引用的匿名原型(例如上面的 $a)。
需要考虑的另一件事是,简历可能只是未定义的,而不是
释放,例如“undef &foo”。 在这种情况下,它的 refcount 可能还没有达到零,但是
我们仍然删除它的pad和它的“CvROOT”等。因为各种孩子可能仍然
让他们的“CvOUTSIDE”指向这个未定义的简历,我们保留自己的“CvOUTSIDE”
暂时,这样词法作用域链是不间断的。 例如,
以下应打印 123:
我的 $x = 123;
sub tmp { sub { eval '$x' } }
我的 $a = tmp();
undef &tmp;
打印 $a->();
布尔 CvWEAKOUTSIDE(CV *cv)
嵌入 功能
cv_dump 转储简历的内容
void cv_dump(CV *cv, const char *标题)
cv_forget_slab
当一个 CV 在它的 Slab 上有一个引用计数(CvSLABBED)时,它负责
确保它被释放。 (因此,任何两个简历都不应该有参考计数
同一个slab。)CV 只需要在编译期间引用slab。 一次
它被编译并附加了 CvROOT,它完成了它的工作,所以它可以忘记
平板
无效 cv_forget_slab(CV *cv)
do_dump_pad
转储padlist的内容
void do_dump_pad(I32 级别, PerlIO *file,
PADLIST *padlist,int 完整)
padlist_dup
复制垫。
PADLIST * padlist_dup(PADLIST *srcpad,
CLONE_PARAMS *参数)
padnamelist_dup
复制打击垫名称列表。
PADNAMELIST * padnamelist_dup(PADNAMELIST *srcpad,
CLONE_PARAMS *参数)
垫名_dup
复制打击垫名称。
PADNAME * padname_dup(PADNAME *src, CLONE_PARAMS *param)
垫分配名称
在当前编译的 pad 中分配一个位置(通过 perlapi 中的“pad_alloc”)和
然后存储该条目的名称。 姓名 被采用并成为名称条目; 它
必须已经包含名称字符串。 打字机 和 我们的藏匿处 和
“padadd_STATE”标志被添加到 姓名. 没有其他处理
perlapi 中的“pad_add_name_pvn”就完成了。 返回分配的焊盘的偏移量
插槽。
PADOFFSET pad_alloc_name(PADNAME *name, U32 标志,
HV *typestash,HV *ourstash)
垫块开始
在进入新块时更新 pad 编译状态变量。
无效 pad_block_start(int 已满)
垫检查重复
检查重复声明:报告以下任何一项:
* 当前作用域中的同名 my;
* 具有相同名称和
与 C 相同的藏匿处
“is_our”表示要检查的名称是“我们的”声明。
void pad_check_dup(PADNAME *name,U32 标志,
常量 HV *ourstash)
pad_findlex
在嵌套衬垫链中的任意位置查找命名词法。 在
如果在外垫中找到内垫。
返回 lex 或假 lex 的底部垫中的偏移量。 cv是简历
从哪个开始搜索,seq 是当前要匹配的 cop_seq。 如果
警告为真,打印适当的警告。 out_* 变量返回值,等等
是指向应该存储返回值的位置的指针。 out_capture,如果非
null,请求捕获词法的最内层实例; out_name 是
设置为最里面匹配的打击垫名称或假打击垫名称; out_flags 返回
通常与假焊盘名称的 PARENT_FAKELEX_FLAGS 字段相关联的标志。
需要注意的是 pad_finlex() 是递归的; 它沿 CV 链向上递归,然后出现
退后一步,随时添加虚假条目。 必须这样,因为假的
匿名原型中的名称必须在 xlow 中将索引存储到父焊盘中。
PADOFFSET pad_findlex(const char *namepv,
STRLEN namelen,U32 标志,
const CV* cv,U32 seq,int 警告,
SV** out_capture,
PADNAME** out_name,
int *out_flags)
pad_fixup_inner_anons
对于垫中的任何匿名 CV,如果该 CV 的 CvOUTSIDE 从 old_cv 更改为 new_cv
必要的。 当必须将新编译的 CV 移动到预先存在的 CV 时需要
结构。
void pad_fixup_inner_anons(PADLIST *padlist,
简历 *old_cv, 简历 *new_cv)
无垫
释放当前焊盘中偏移 po 处的 SV。
void pad_free(PADOFFSET po)
垫_离开米
编译期间作用域结束时的清理:设置词法的最大序列号
这个范围并警告任何从未被引入的词法。
无效 pad_leavemy()
垫推
将一个新的 pad 框架推到 padlist 上,除非在这个深度已经有一个 pad,
在这种情况下,不要费心创建一个新的。 然后给新垫一个@_ in
插槽零。
void pad_push(PADLIST *padlist,int 深度)
垫重置
标记所有当前临时对象以供重用
无效pad_reset()
垫_滑动
放弃当前焊盘中偏移量 po 处的 tmp 并替换为新的。
void pad_swipe(PADOFFSET po, bool readjust)
GV 功能
gv_try_downgrade
注意:此功能是实验性的,可能会更改或删除,恕不另行通知。
如果 typeglob "gv" 可以更简洁地表达,
不是一个真正的 GV 在它的藏匿处,用优化的形式替换它。
对此的基本要求是“gv”是一个真正的 typeglob,足够
普通,仅从其包中引用。 这个功能是为了
当 GV 被部分查找以查看那里有什么时使用,导致
升级,但根据发现的结果,真正的 GV 不是
毕竟需要。
如果 "gv" 是一个完全空的 typeglob,它会从存储中删除。
如果 "gv" 是一个只包含一个足够普通的常量 sub 的 typeglob,则
typeglob 被替换为更紧凑的标量引用占位符
代表同一个东西。
无效 gv_try_downgrade(GV* gv)
哈希 操作 功能
hv_ename_add
将名称添加到存储的内部有效名称列表。 请参阅“hv_ename_delete”。
当将存储分配给符号表中的新位置时调用此方法。
void hv_ename_add(HV *hv, const char *name, U32 len,
U32 标志)
hv_ename_删除
从存储的内部有效名称列表中删除名称。 如果这是
“HvENAME”返回的名称,然后列表中的另一个名称将取代它
(“HvENAME”将使用它)。
从符号表中删除存储时调用此方法。
void hv_ename_delete(HV *hv, const char *name,
U32 len,U32 标志)
refcounted_he_chain_2hv
生成并返回表示“refcounted_he”内容的“HV *”
链。 标志 当前未使用且必须为零。
HV * refcounted_he_chain_2hv(
const struct refcounted_he *c, U32 标志
)
refcounted_he_fetch_pv
类似于“refcounted_he_fetch_pvn”,但采用以空字符结尾的字符串而不是
字符串/长度对。
SV * refcounted_he_fetch_pv(
const struct refcounted_he *链,
const char *key、U32 哈希、U32 标志
)
refcounted_he_fetch_pvn
沿着“refcounted_he”链搜索具有由指定的键的条目 密钥
和 钥匙圈。 如果 标志 设置了“REFCOUNTED_HE_KEY_UTF8”位,关键八位字节是
解释为 UTF-8,否则解释为 Latin-1。 哈希 是一个
密钥字符串的预先计算的哈希值,如果尚未预先计算,则为零。
返回一个表示与键关联的值的凡人标量,或
&PL_sv_placeholder 如果没有与键关联的值。
SV * refcounted_he_fetch_pvn(
const struct refcounted_he *链,
const char *keypv、STRLEN keylen、U32 哈希、
U32 标志
)
refcounted_he_fetch_pvs
类似于“refcounted_he_fetch_pvn”,但采用文字字符串而不是
字符串/长度对,并且没有预先计算的哈希值。
SV * refcounted_he_fetch_pvs(
const struct refcounted_he *链,
const char *key,U32 标志
)
refcounted_he_fetch_sv
类似于“refcounted_he_fetch_pvn”,但采用 Perl 标量而不是字符串/长度
对。
SV * refcounted_he_fetch_sv(
const struct refcounted_he *chain, SV *key,
U32 哈希,U32 标志
)
refcounted_he_free
将“refcounted_he”的引用计数减一。 如果参考
计数达到零,结构的内存被释放,这(递归地)导致
减少其父级“refcounted_he”的引用计数。 通过一个是安全的
指向此函数的空指针:在这种情况下不会发生任何操作。
void refcounted_he_free(struct refcounted_he *he)
refcounted_he_inc
增加“refcounted_he”的引用计数。 指向的指针
“refcounted_he”也被返回。 向 this 传递一个空指针是安全的
功能:不发生任何动作,返回空指针。
结构 refcounted_he * refcounted_he_inc(
结构 refcounted_he *he
)
refcounted_he_new_pv
类似于“refcounted_he_new_pvn”,但采用以空字符结尾的字符串而不是
字符串/长度对。
结构 refcounted_he * refcounted_he_new_pv(
结构 refcounted_he *parent,
const char *key,U32 哈希,
SV *值,U32 标志
)
refcounted_he_new_pvn
创建一个新的“refcounted_he”。 这由单个键/值对和一个
引用现有的“refcounted_he”链(可能是空的),因此
形成一条更长的链。 当使用更长的链时,新的键/值对需要
优先于链中更远的相同密钥的任何条目。
新密钥由 密钥 和 钥匙圈。 如果 标志 有
“REFCOUNTED_HE_KEY_UTF8”位设置,关键八位字节被解释为UTF-8,
否则它们被解释为Latin-1。 哈希 是密钥的预先计算的散列
字符串,如果尚未预先计算,则为零。
折扣值 是要为此键存储的标量值。 折扣值 被这个复制了
函数,因此不拥有对它的任何引用的所有权,后来
对标量的更改不会反映在
“refcounted_he”。 复杂类型的标量不会与引用一起存储
完整性,但会被强制为字符串。 折扣值 可能为空或
&PL_sv_placeholder 表示没有值与键相关联;
与任何非空值一样,this 优先于值的存在
对于沿着链条更远的钥匙。
亲 指向要附加到新的“refcounted_he”链的其余部分
“refcounted_he”。 此函数拥有对一个引用的所有权 亲及
返回一个对新“refcounted_he”的引用。
结构 refcounted_he * refcounted_he_new_pvn(
结构 refcounted_he *parent,
常量字符 *keypv,
STRLEN 密钥,U32 哈希,
SV *值,U32 标志
)
refcounted_he_new_pvs
类似于“refcounted_he_new_pvn”,但采用文字字符串而不是
字符串/长度对,并且没有预先计算的哈希值。
结构 refcounted_he * refcounted_he_new_pvs(
结构 refcounted_he *parent,
const char *键,SV *值,
U32 标志
)
refcounted_he_new_sv
类似于“refcounted_he_new_pvn”,但采用 Perl 标量而不是字符串/长度
对。
结构 refcounted_he * refcounted_he_new_sv(
结构 refcounted_he *parent,
SV *key,U32 哈希,SV *value,
U32 标志
)
IO 功能
开始全局
注意:此功能是实验性的,可能会更改或删除,恕不另行通知。
由“do_readline”调用的函数以生成一个 glob(或在 perl 上执行 glob
VMS)。 这段代码曾经是内联的,但现在 perl 使用“File::Glob”这个 glob
starter 仅在构建过程中由 miniperl 使用。 移开它会缩小
pp_hot.c; 缩小 pp_hot.c 有助于加速 perl。
PerlIO* start_glob(SV *tmpglob, IO *io)
词法分析器 接口
验证原型
注意:此功能是实验性的,可能会更改或删除,恕不另行通知。
此函数对原型“proto”执行语法检查。 如果“警告”是
true,任何非法字符或不匹配的括号都会触发非法原型
警告,声明它们是在“名称”的原型中检测到的。
如果这是一个有效的原型,则返回值为“true”,如果不是,则返回“false”,
无论“警告”是“真”还是“假”。
请注意,“NULL”是有效的“proto”并且将始终返回“true”。
注意:不推荐使用此函数的 perl_ 形式。
bool validate_proto(SV *名称, SV *proto, bool warn)
神奇 功能
魔法清除提示
由 %^H 的删除触发,将键记录到“PL_compiling.cop_hints_hash”。
int magic_clearhint(SV* sv, MAGIC* mg)
魔术清除提示
通过清除 %^H 触发,重置“PL_compiling.cop_hints_hash”。
int magic_clearhints(SV* sv, MAGIC* mg)
魔法调用
调用一个魔法方法(比如 FETCH)。
“sv”和“mg”是绑定的东西和绑定魔法。
“meth”是要调用的方法的名称。
“argc”是传递给方法的 args 的数量(除了 $self)。
“标志”可以是:
G_DISCARD 使用 G_DISCARD 标志调用方法,不要
返回一个值
G_UNDEF_FILL 用 argc 指针填充堆栈
PL_sv_undef
参数本身是“flags”参数之后的任何值。
返回方法返回的 SV(如果有),或者失败时返回 NULL。
SV* magic_methcall(SV *sv, const MAGIC *mg,
SV *meth,U32 标志,U32 argc,
...)
魔术设置
由存储触发到 %^H,将键/值对记录到
“PL_compiling.cop_hints_hash”。 假设提示不存储任何内容
那将需要一个深拷贝。 如果我们找到参考,也许我们应该警告。
int magic_sethint(SV* sv, MAGIC* mg)
毫克本地化
将一些魔法从现有 SV 复制到该 SV 的新本地化版本。
容器魔法(例如 %ENV、$1、tie)被复制,值魔法不会(例如污点、
位置)。
如果 setmagic 为 false,则不会在新的(空)SV 上调用 set magic。 这个
通常意味着分配很快就会出现(例如'local $x = $y'),并且
将处理魔法。
void mg_localize(SV* sv, SV* nsv, bool setmagic)
其他 功能
free_c_backtrace
解除分配从 get_c_bracktrace 收到的回溯。
无效 free_c_backtrace(Perl_c_backtrace* bt)
获取c回溯
将回溯(又名“stacktrace”)收集到单个线性 malloced 缓冲区中,
来电者 必须 Perl_free_c_backtrace().
按深度 + 跳过扫描帧,然后丢弃最里面的跳过,返回
大多数深度帧。
Perl_c_backtrace* get_c_backtrace(int max_depth,
int跳过)
维修 功能
mro_get_线性_isa_dfs
返回给定存储的@ISA 的深度优先搜索线性化。 回报
值是只读的 AV*。 “级别”应为 0(在此内部使用
函数的递归)。
如果您打算存储,则您应对返回值的“SvREFCNT_inc()”负责
它可以半永久性地在任何地方(否则它可能会从你下面删除)
下次缓存失效时)。
AV* mro_get_linear_isa_dfs(HV* stash,U32 级别)
mro_isa_changed_in
当给定的@ISA 时,采取必要的步骤(缓存失效,主要是)
包已更改。 由“setisa”魔法调用,应该不需要调用
直。
无效 mro_isa_changed_in(HV* 存储)
mro_package_moved
调用此函数以向储藏室发出信号,表明它已被分配到另一个地点
在存储层次结构中。 “stash”是已分配的存储。 “旧仓库”
是它替换的存储(如果有)。 “gv”是实际存在的glob
分配给。
这也可以使用 null 第一个参数调用,以指示“oldstash”具有
被删除。
此函数使旧存储上的 isa 缓存无效,在嵌套的所有子包上
在它里面,以及所有这些的子类,包括不存在的包
在“stash”中有相应的条目。
它还根据需要在所有存储上设置有效名称(“HvENAME”)。
如果“gv”存在并且不在符号表中,那么这个函数只是
返回。 如果“flags & 1”,则此检查将被跳过。
无效 mro_package_moved(HV * 常量存储,
HV * const oldstash,
常量 GV * 常量 GV,
U32 标志)
奥普特里 操作 功能
Finalize_optree
这个函数完成了 optree。 应在完成后直接调用
optree 建立。 它会进行一些额外的检查,而这些检查在
正常的 ck_xxx 功能并使树线程安全。
无效 finalize_optree(OP* o)
垫 时间 结构
CX_CURPAD_SAVE
将当前填充保存在给定的上下文块结构中。
无效CX_CURPAD_SAVE(结构上下文)
CX_CURPAD_SV
访问给定上下文块中保存的当前填充中偏移量 po 处的 SV
结构(可用作左值)。
SV * CX_CURPAD_SV(结构上下文,PADOFFSET po)
密码是我们的
这是否是“我们的”变量。
bool PadnameIsOUR(PADNAME pn)
PadnameIsSTATE
这是否是“状态”变量。
bool PadnameIsSTATE(PADNAME pn)
昵称OURSTASH
声明了这个“我们的”变量的藏匿处。
HV * 用户名OURSTASH()
密码OUTER
此条目是否属于外垫。 这是真的条目是
通常被称为“假货”。
bool PadnameOUTER(PADNAME pn)
姓名类型
与类型化词汇相关的存储。 这将返回“我的”的 %Foo:: 哈希
Foo $bar”。
HV * PadnameTYPE(PADNAME pn)
PAD_BASE_SV
从 padlist 的 base (DEPTH=1) pad 中的 slot "po" 中获取值
SV * PAD_BASE_SV(PADLIST padlist, PADOFFSET po)
PAD_CLONE_VARS
克隆与运行和编译 pad 相关的状态变量。
void PAD_CLONE_VARS(PerlInterpreter *proto_perl,
CLONE_PARAMS* 参数)
PAD_COMPNAME_FLAGS
在偏移量“po”处返回当前编译垫名称的标志。 假设一个
有效的插槽条目。
U32 PAD_COMPNAME_FLAGS(PADOFFSET 宝)
PAD_COMPNAME_GEN
当前编译pad中偏移量“po”处名称的代号
(左值)。 请注意,为此目的劫持了“SvUVX”。
STRLEN PAD_COMPNAME_GEN(PADOFFSET po)
PAD_COMPNAME_GEN_set
设置当前ling pad中偏移量“po”处名称的生成编号
(左值)到“gen”。 请注意,为此目的劫持了“SvUV_set”。
STRLEN PAD_COMPNAME_GEN_set(PADOFFSET po, int gen)
PAD_COMPNAME_OURSTASH
返回与“我们的”变量关联的存储。 假设插槽条目是一个
有效的“我们的”词汇。
HV * PAD_COMPNAME_OURSTASH(PADOFFSET po)
PAD_COMPNAME_PV
返回偏移量“po”处的当前编译垫名称的名称。 假设有效
插槽条目。
字符 * PAD_COMPNAME_PV(PADOFFSET po)
PAD_COMPNAME_TYPE
在偏移量“po”处返回当前编译垫名称的类型(stash)。 必须是
一个有效的名称。 如果未键入,则返回 null。
HV * PAD_COMPNAME_TYPE(PADOFFSET po)
PAD_RESTORE_LOCAL
将保存到局部变量 opad 中的旧 pad 恢复为 PAD_SAVE_LOCAL()
无效 PAD_RESTORE_LOCAL(垫 *opad)
PAD_SAVE_LOCAL
将当前焊盘保存到局部变量 opad 中,然后使当前焊盘等于
到npad
无效 PAD_SAVE_LOCAL(垫 *opad,垫 *npad)
PAD_SAVE_SETNULLPAD
保存当前垫然后将其设置为空。
无效 PAD_SAVE_SETNULLPAD()
PAD_SETSV
将当前垫中偏移“po”处的插槽设置为“sv”
SV * PAD_SETSV(PADOFFSET po, SV* sv)
PAD_SET_CUR
在padlist中设置当前pad为pad“n”,保存上一个当前pad。
注意目前这个宏扩展为一个字符串对于某些编译器来说太长了,所以它是
最好换成
保存COMPPAD();
PAD_SET_CUR_NOSAVE(padlist,n);
void PAD_SET_CUR(PADLIST padlist,I32 n)
PAD_SET_CUR_NOSAVE
像 PAD_SET_CUR,但没有保存
void PAD_SET_CUR_NOSAVE(PADLIST padlist, I32 n)
PAD_SV 获取当前焊盘中偏移“po”处的值
SV * PAD_SV(PADOFFSET po)
PAD_SVl “PAD_SV”的轻量级和左值版本。 获取或设置偏移量“po”处的值
在当前垫中。 与“PAD_SV”不同,不使用 -DX 打印诊断信息。 为了
仅供内部使用。
SV * PAD_SVl(PADOFFSET po)
保存清除SV
清除范围退出时指向的填充值。 (即“我的”的运行时动作)
无效 SAVECLEARSV(SV **svp)
保存COMPAD
保存 PL_comppad 和 PL_curpad
无效保存COMPPAD()
存盘
保存一个焊盘槽(用于迭代后恢复)
XXX DAPM 将 arg 设为 PADOFFSET 会更有意义
无效的 SAVEPADSV(PADOFFSET po)
每个口译员 变量
PL_DB单
当 Perl 在调试模式下运行时,使用 -d 开关,这个 SV 是一个布尔值
指示 subs 是否正在单步执行。 单步是自动的
每一步后开启。 这是对应于 Perl 的 C 变量
$DB::单个变量。 请参阅“PL_DBsub”。
SV * PL_DBsingle
PL_DB子
当 Perl 在调试模式下运行时,使用 -d 开关,这个 GV 包含 SV
它保存正在调试的子的名称。 这是 C 变量
对应于 Perl 的 $DB::sub 变量。 请参阅“PL_DBsingle”。
GV * PL_DBsub
PL_DBtrace
在调试模式下运行 Perl 时使用的跟踪变量,带有 -d 转变。 这个
是对应于 Perl 的 $DB::trace 变量的 C 变量。 看
“PL_DBsingle”。
SV * PL_DBtrace
PL_down
对应于 Perl 的 $^W 警告变量的 C 变量。
布尔 PL_dowarn
PL_last_in_gv
上次用于文件句柄输入操作的 GV。 (" ”)
GV* PL_last_in_gv
PL_ofsgv
Perl 空间中包含输出字段分隔符“*,”的 glob。
GV* PL_ofsgv
PL_rs Perl 空间中的输入记录分隔符 - $/。
SV* PL_rs
堆 操作 宏
djSP 声明只是“SP”。 这实际上与“dSP”相同,并声明了一个本地副本
perl 的堆栈指针,可通过“SP”宏获得。 参见“SP”。 (可以用来
与旧的 (Perl 5.005) 线程模型的向后源代码兼容性。)
DJSP;
LVRET 如果此操作将是左值子例程的返回值,则为真
SV 操作 功能
一个 SV(或 AV、HV 等)被分配为两部分:头部(struct sv、av、hv...)
包含类型和引用计数信息,对于许多类型,一个指向主体的指针
(struct xrv, xpv, xpviv...),其中包含特定于每种类型的字段。 某些类型
把他们需要的所有东西都储存在头脑里,所以不要有身体。
除了大多数记忆偏执的配置(例如:PURIFY),头部和身体都是
在 arenas 外分配,默认情况下分配了大约 4K 块内存
成 N 个头或体。 sv-body 由它们的 sv-type 分配,保证大小
从数组安全分配所需的一致性。
对于 SV-heads,每个 arena 中的第一个 slot 是保留的,并保存到下一个的链接
竞技场、一些标志和插槽数量的注释。 蜿蜒穿过每个竞技场链是
免费项目的链接列表; 当它变空时,会分配一个额外的竞技场,并且
分为N个项目,这些项目被线程化到空闲列表中。
SV-body 类似,但它们默认使用 arena-sets,将链接和
来自竞技场本身的信息,并收回竞技场中的第一个位置。 SV-body 更进一步
稍后描述。
以下全局变量与 arenas 相关联:
PL_sv_arenaroot 指向 SV 竞技场列表的指针
PL_sv_root 指向空闲 SV 结构列表的指针
PL_body_arenas 身体竞技场链表的头部
PL_body_roots[] 指向 svtype 自由体列表的指针数组
数组由所需的 svtype 索引
一些特殊的 SV 头不是从竞技场分配的,而是直接创建的
在解释器结构中,例如 PL_sv_undef。 竞技场的大小可以从
默认情况下,在编译时适当地设置 PERL_ARENA_SIZE。
SV 竞技场的次要目的是允许定位和
在最终清理期间销毁。
在最低级别,宏 新的_SV() 和 删除SV() 抓住并释放一个 SV 头。 (如果
用-DD调试, 删除SV() 调用函数 S_del_sv() 将 SV 归还给自由
带有错误检查的列表。) 新的_SV() 电话 更多_sv() / sv_add_arena() 添加一个额外的竞技场
如果空闲列表为空。 空闲列表中的 SV 将它们的 SvTYPE 字段设置为全部。
在最后的清理时, sv_free_arena() 被称为 perl_destruct() 至
物理上释放自解释器启动以来分配的所有竞技场。
该功能 访问() 扫描SV arenas列表,并为每个SV调用指定的函数
它发现哪个仍然存在 - 即哪个 SvTYPE 不是全 1,并且是非零
SvREFCNT。 访问() 由以下函数使用(指定为 [函数调用
访问()] / [被调用的函数 访问() 对于每个 SV]):
sv_report_used() / do_report_used()
转储所有剩余的 SV(调试帮助)
sv_clean_objs() / do_clean_objs(),do_clean_named_objs(),
do_clean_named_io_objs(),do_curse()
尝试释放 RV 指向的所有对象,
尝试对目录中的所有对象执行相同的操作
也被 typeglobs 直接引用,并且
然后做最后的扫描,诅咒任何
留下的对象。 从
perl_destruct(),在调用 sv_clean_all() 之前
联络一位教师
sv_clean_all() / do_clean_all()
SvREFCNT_dec(sv) 每个剩余的 SV,可能
触发 sv_free()。 它还设置了
SV 上的 SVf_BREAK 标志表示
refcnt 已被人为降低,因此
阻止 sv_free() 发出虚假警告
关于 SVs 出乎意料地具有 refcnt
零。 从 perl_destruct() 重复调用
直到没有 SV 剩下。
思思至上
快速标志检查以查看是否应将 sv 传递给 sv_force_normal
SvIVX或SvPVX之前的“降级”可以直接修改。
例如,如果您的标量是一个参考并且您想修改 SvIVX 插槽,
您不能只执行 SvROK_off,因为这会泄漏所指对象。
这是由各种 sv 修改函数内部使用的,例如 sv_setsv,
sv_setiv 和 sv_pvn_force。
这不能处理的一种情况是没有设置 SvFAKE 的 gv。 后
如果(SvTHINKFIRST(gv))sv_force_normal(gv);
它仍然是一个gv。
SvTHINKFIRST 有时会产生误报。 在这些情况下 sv_force_normal
什么也没做。
U32 SvTHINKFIRST(SV *sv)
sv_add_arena
给定一块内存,将其链接到 arenas 列表的头部,并将其拆分
进入免费 SV 列表。
void sv_add_arena(char *const ptr,const U32 大小,
const U32 标志)
sv_clean_all
减少每个剩余 SV 的 refcnt,可能会触发清理。 这个
可能必须多次调用函数才能释放复杂的 SV
自我参照层次结构。
I32 sv_clean_all()
sv_clean_objs
尝试销毁所有尚未释放的对象。
无效 sv_clean_objs()
sv_free_arena
释放所有 arenas 使用的内存。 请注意,所有单独的 SV 头
竞技场内的尸体肯定已经被释放了。
无效 sv_free_arenas()
SV-身体 分配
sv_2num 注意:此功能是实验性的,可能会更改或删除,恕不另行通知。
返回一个带有源 SV 数值的 SV,执行任何必要的操作
引用或重载转换。 预计调用者已经处理了 get-
魔法已经。
SV* sv_2num(SV *const sv)
sv_copypv
将源 SV 的字符串化表示复制到目标 SV 中。
自动执行任何必要的 mg_get 并将数值强制转换为
字符串。 保证即使从重载的对象中保留 UTF8 标志。 相似的
本质上是 sv_2pv[_flags] 但直接在 SV 上操作,而不仅仅是
细绳。 主要使用 sv_2pv_flags 来完成它的工作,除非它会丢失
PV的UTF-8'ness。
无效 sv_copypv(SV *const dsv, SV *const ssv)
sv_ref 返回一个 SV,描述传入的 SV 是对什么的引用。
SV* sv_ref(SV *dst, const SV *const sv,
常量 ob)
统一 客户支持
查找uninit_var
注意:此功能是实验性的,可能会更改或删除,恕不另行通知。
查找导致操作员发出的未定义变量(如果有)的名称
“使用未初始化的值”警告。 如果匹配为真,则仅在以下情况下返回名称
它的值与 uninit_sv 匹配。 所以粗略地说,如果一个一元运算符(如
OP_COS) 生成警告,然后跟随操作的直接子级可能会产生
给出未定义变量名称的 OP_PADSV 或 OP_GV。 在另一
手,使用 OP_ADD 有两个分支要遵循,所以我们只打印变量
如果我们得到完全匹配的名称。 desc_p 指向一个字符串指针
操作说明。 如果需要,这可能会更新。
该名称作为凡人 SV 返回。
假设 PL_op 是最初触发错误的操作,并且
PL_comppad/PL_curpad 指向当前执行的焊盘。
SV* find_uninit_var(const OP *const obase,
常量 SV *常量 uninit_sv,
布尔匹配,const char **desc_p)
报告_uninit
打印适当的“使用未初始化的变量”警告。
无效报告_uninit(常量 SV *uninit_sv)
无证 功能
以下功能目前未记录在案。 如果您使用其中之一,您可能希望
考虑为其创建和提交文档。
PerlIO_restore_errno
PerlIO_save_errno
Slab_Alloc
板_自由
板到ro
板坯到读写
_add_range_to_invlist
_core_swash_init
_get_编码
_get_swash_invlist
_invlist_array_init
_invlist_contains_cp
_invlist_内容
_invlist_dump
_invlist_交集
_invlist_intersection_maybe_complement_2nd
_invlist_invert
_invlist_len
_invlist_populate_swatch
_invlist_搜索
_invlist_subtract
_invlist_union
_invlist_union_maybe_complement_2nd
_load_PL_utf8_foldclosures
_new_invlist
_setup_canned_invlist
_swash_inversion_hash
_swash_to_invlist
_to_fold_latin1
_to_upper_title_latin1
_warn_problematic_locale
分配公共变量
添加 cp_to_invlist
alloc_maybe_populate_EXACT
分配
amagic_is_enabled
应用
av_extend_guts
av_具体化
绑定匹配
boot_core_PerlIO
boot_core_UNIVERSAL
启动核心_mro
剑度
check_utf8_print
ck_匿名代码
ck_反引号
ck_bittop
CK_CMP
ck_concat
ck_定义
CK_删除
ck_each
ck_entersub_args_core
ck_eof
CK_评估
ck_exec
ck_存在
CK_FTST
ck_fun
ck_glob
ck_grep
CK索引
CK_加入
CK_长度
ck_lfun
ck_listiob
对照匹配
ck_方法
ck_null
CK_OPEN
ck_原型
ck_readline
ck_ref分配
CK_重复
ck_require
CK_返回
ck_rfun
ck_rvconst
ck_s分配
CK_选择
CK_SHIFT
ck_smartmatch
CK_排序
ck_spair
CK_分裂
ck_字符串化
ck_subr
ck_substr
ck_svconst
CK_告诉
ck_trunc
最近的警察
计算EXACTish
核心子操作
创建评估范围
呱呱叫_无内存
croak_popstack
当前重新引擎
自定义操作获取字段
cv_ckproto_len_flags
CV_克隆_进入
cv_const_sv_or_av
cv_undef_flags
cvgv_from_hek
cvgv_set
cvstash_set
deb_stack_all
定义目标
删除评估范围
die_unwind
do_aexec
do_aexec5
do_eof
执行
do_exec3
do_execfree
do_ipcctl
do_ipcget
do_msgrcv
do_msgsnd
do_nmp
do_open6
do_open_raw
打印
do_readline
做_寻求
做_semop
do_shmio
do_sysseek
一定要告诉
做_trans
do_vecget
do_vecset
做_vop
文件
drand48_init_r
德兰德48_r
转储所有perl
转储_packsubs_perl
转储子perl
转储_sv_child
模拟_cop_io
功能已启用
查找词法简历
查找runcv_where
查找rundefsv2
查找脚本
free_tied_hv_pool
get_and_check_backslash_N_name
获取_db_sub
获取调试选项
获取哈希种子
获取invlist_iter_addr
获取_invlist_offset_addr
获取_invlist_previous_index_addr
获取不修改
获取_opargs
获取重新参数
获取环境长度
grok_toUV
格罗克_bslash_x
gv_fetchmeth_internal
gv_覆盖
gv_setref
gv_stashpvn_internal
gv_stashsvpvn_cached
hfree_next_entry
hv_backreferences_p
hv_kill_backrefs
hv_占位符_p
hv_undef_flags
init_argv_符号
初始化常量
初始化参数
初始化调试器
颠倒
invlist_array
invlist_克隆
invlist_highest
invlist_is_itering
invlist_iterfinish
invlist_iterinit
最大invlist_max
invlist_previous_index
invlist_set_len
invlist_set_previous_index
invlist_trim
io_close
is_utf8_common
信息素
或许吧
关键词
关键字插件_标准
名单
本地化
magic_clear_all_env
magic_cleararylen_p
魔术清除环境
魔术清除
魔术清除包
魔术清除签名
magic_copycallchecker
魔法存在包
magic_freearylen_p
magic_freeovrld
魔法获取
magic_getarylen
magic_getdebugvar
magic_getdefelem
magic_getnkeys
魔术包
魔术getpos
magic_getsig
magic_getsubstr
magic_gettaint
magic_getuvar
魔术getvec
magic_killbackrefs
magic_nextpack
magic_regdata_cnt
magic_regdatum_get
magic_regdatum_set
魔法标量包
魔法集
magic_set_all_env
magic_setarylen
magic_setcollxfrm
magic_setdbline
magic_setdebugvar
magic_setdefelem
魔法设置环境
魔术师
magic_setlvref
magic_setmglob
魔术设置键
魔法套装
magic_setpos
magic_setregexp
magic_setsig
magic_setsubstr
魔法设置
magic_setutf8
魔法设置变量
magic_setvec
魔术尺寸包
魔法擦拭包
malloc_good_size
malloced_size
mem_collxfrm
mg_find_mglob
mode_from_discipline 模式
更多_身体
mro_meta_dup
mro_meta_init
多重引用字符串化
我的属性
我的_clearenv
my_lstat_flags
我的统计标志
我的_unexec
新的ATTRSUB_x
新GP
新的METHOP_internal
新存根
新SVavdefelem
新XS_def文件
newXS_len_flags
新的警告位字段
下一个参数
诺珀尔迪
哎呀
哎呀
操作清除
运算整型
op_lvalue_flags
op_refcnt_dec
op_refcnt_inc
op_relocate_sv
op_std_init
op_unscope
opmethod_stash
opslab_force_free
opslab_free
opslab_free_nopad
包
包版本
pad_add_weakref
padlist_store
垫名_free
padnamelist_free
解析子签名
解析unicode_opts
无解析器
parser_free_nexttoke_ops
路径可搜索
窥视
运行时
填充_isa
指针哈希值
错误
重新操作编译
reg_named_buff
reg_named_buff_iter
reg_numbered_buff_fetch
reg_numbered_buff_length
reg_numbered_buff_store
reg_qr_package
reg_skipcomment
reg_temp_copy
定期
regpposixcc
注册
报告邪恶_fh
报告重新定义的简历
报告_wrongway_fh
重复
信号恢复
信号保存
rxres_保存
相同方向
保存别名sv
保存字符串
锯齿状
纯量
空洞
设置插入符_X
设置列表
应该警告nl
哨兵
软引用2xv
ssc_添加范围
ssc_clear_locale
ssc_cp_and
ssc_交集
ssc_union
次压碎深度
sv_add_backref
sv_buf_to_ro
sv_del_backref
sv_free2
sv_kill_backrefs
sv_len_utf8_nomg
sv_magicext_mglob
sv_mortalcopy_flags
sv_only_taint_gmagic
sv_or_pv_pos_u2b
sv_resetpvn
sv_setthek
sv_setsv_cow
sv_unglob
绑定方法
tmps_grow_p
翻译子字符串偏移量
try_magic_bin
try_magic_un
取消分享
利用
变量名
vivify_defelem
活泼参考
等待进程
was_lvalue_sub
看
win32_croak_not_implemented
写入标准错误
xs_boot_epilog
xs_握手
yy错误
yyerror_pv
yyerror_pvn
伊莱克斯
yy解析
云雷克斯
作者
自动文档系统最初是由 Benjamin Stuhl 添加到 Perl 核心中的。
文档是由任何愿意记录其功能的人提供的。
使用 onworks.net 服务在线使用 perlintern