内容

名称

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

on_end_of_compile_scope(sub { print "Hallo world\n"; });

将在 (编译时) 范围结束时调用一个子例程。该子例程将被调用一次,不带任何参数。可以多次调用它(即使在同一个“编译时”范围中)以安装多个子例程。子例程按“先进后出”顺序(FILO 或“堆栈”顺序)调用。

fill_protos

fill_protos('*$$;$@')

给定一个 Perl 子例程原型,返回一个调用规范列表。每个规范都是一个列表引用,其中第一个成员是此调用规范的(最小)参数数量。其余参数是字符串表示形式,表示在使用给定数量的参数调用时,如何将参数正确传递给具有给定原型的子例程。

规范以从 0(例如 ';$')或 1(例如 '$@')开始的递增参数顺序返回。请注意,如果原型是“slurpy”(例如以“@”结尾),则最后一个规范的参数数量是“最小”数量,而不是确切数量。可以通过最后一个规范的最后一个成员匹配 m/[@#]_/ 来检测到这一点。

make_core_trampoline

make_core_trampoline('CORE::open', 'main', prototype('CORE::open'))

创建一个用于调用核心子例程的蹦床。本质上,这是一个微小的子例程,它弄清楚我们应该如何调用核心子例程,以正确的方式放入参数,并将我们的控制权传递给它。

如果我们能够可靠地在核心内置函数上使用 `goto &`,我们就不会需要这个子例程。

install_subs

install_subs('My::Module', { 'read' => sub { die("Hallo\n"), ... }})

给定一个包名和一个将名称映射到子例程引用(或 `undef`)的哈希引用,此子例程将在该模块中以其给定名称安装这些子例程。如果一个名称映射到 `undef`,则目标模块中任何具有该名称的子例程都将被删除(可能“取消遮蔽”具有相同名称的 CORE 子例程)。

作者

版权所有 2013-2014,Niels Thykier <[email protected]>

许可证

此模块是自由软件。您可以根据与 Perl 本身相同的条款分发它。