autodie::Util - autodie 和 Fatal 的内部实用子例程
# INTERNAL API for autodie and Fatal only!
use autodie::Util qw(on_end_of_compile_scope);
on_end_of_compile_scope(sub { print "Hallo world\n"; });
autodie 和 Fatal 的内部实用程序!此模块不属于 autodie 的公共 API。
此模块包含用于抽象 autodie 的底层魔法和 (滥用) %^H
在 (编译时) 范围结束时调用子例程的实用子例程。
请注意,由于 %^H
的工作方式,其中一些实用程序仅在 Perl 模块的编译阶段有用,并且依赖于 Perl 如何在 %^H
中处理引用的内部机制。
on_end_of_compile_scope(sub { print "Hallo world\n"; });
将在 (编译时) 范围结束时调用一个子例程。该子例程将被调用一次,不带任何参数。可以多次调用它(即使在同一个“编译时”范围中)以安装多个子例程。子例程按“先进后出”顺序(FILO 或“堆栈”顺序)调用。
fill_protos('*$$;$@')
给定一个 Perl 子例程原型,返回一个调用规范列表。每个规范都是一个列表引用,其中第一个成员是此调用规范的(最小)参数数量。其余参数是字符串表示形式,表示在使用给定数量的参数调用时,如何将参数正确传递给具有给定原型的子例程。
规范以从 0(例如 ';$')或 1(例如 '$@')开始的递增参数顺序返回。请注意,如果原型是“slurpy”(例如以“@”结尾),则最后一个规范的参数数量是“最小”数量,而不是确切数量。可以通过最后一个规范的最后一个成员匹配 m/[@#]_/ 来检测到这一点。
make_core_trampoline('CORE::open', 'main', prototype('CORE::open'))
创建一个用于调用核心子例程的蹦床。本质上,这是一个微小的子例程,它弄清楚我们应该如何调用核心子例程,以正确的方式放入参数,并将我们的控制权传递给它。
如果我们能够可靠地在核心内置函数上使用 `goto &`,我们就不会需要这个子例程。
install_subs('My::Module', { 'read' => sub { die("Hallo\n"), ... }})
给定一个包名和一个将名称映射到子例程引用(或 `undef`)的哈希引用,此子例程将在该模块中以其给定名称安装这些子例程。如果一个名称映射到 `undef`,则目标模块中任何具有该名称的子例程都将被删除(可能“取消遮蔽”具有相同名称的 CORE 子例程)。
版权所有 2013-2014,Niels Thykier <[email protected]>
此模块是自由软件。您可以根据与 Perl 本身相同的条款分发它。