内容

名称

Test2::Util - Test2 及其关联工具使用的工具。

描述

Test2 及其关联工具使用的工具集合。

导出

所有导出都是可选的。您必须指定要导入的子例程。

($success, $error) = try { ... }

评估代码块,返回成功或失败以及错误消息。此代码保护 $@ 和 $!,它们将在运行结束时恢复。此代码还会暂时阻止 $SIG{DIE} 处理程序。

protect { ... }

与 try 类似,但它不会捕获异常。此处的目的是保护 $@ 和 $! 不被更改。只要运行成功,$@ 和 $! 将恢复到运行前的状态。如果运行失败,$! 仍将恢复,但 $@ 将包含正在抛出的异常。

CAN_FORK

如果此系统能够真正或伪造克隆,则为 True。

CAN_REALLY_FORK

如果系统能够真正克隆,则为 True。对于克隆被模拟的系统,此项将为 false。

CAN_THREAD

如果此系统能够使用线程,则为 True。

USE_THREADS

如果启用线程,则返回 true;如果未启用线程,则返回 false。

get_tid

如果启用线程,这将返回当前线程的 ID;否则,返回 0。

my $file = pkg_to_file($package)

将包名称转换为文件名。

$string = ipc_separator()

获取 IPC 分隔符。目前,这始终为字符串 '~'

$string = gen_uid()

生成唯一 ID(不是 UUID)。这通常是进程 ID、线程 ID、时间和增量整数,所有这些都与 ipc_separator() 连接在一起。

这些 ID 对于大多数目的来说都是足够唯一的。要生成相同的 ID,您必须让 2 个具有相同 PID 的进程在增量整数的相同当前状态下同时生成 ID。在多台机器上发生这种情况完全合理,但在一台机器上不太可能发生。

如果进程生成 ID,调用 exec,并在 exec 后再次执行,并且所有这些操作都在不到一秒的时间内完成,则可能无法唯一。如果系统进程 ID 在不到一秒的时间内循环,从而允许使用此生成器运行的 2 个不同程序在不到一秒的时间内使用相同的 PID,也可能发生这种情况。这两种情况都极不可能发生。如果您需要全局唯一 ID 或在这些条件下唯一的 ID,请查看 Data::UUID

($ok, $err) = do_rename($old_name, $new_name)

重命名文件,这将封装 `rename()`,使其在尝试重命名最近更改的文件时跨平台更可靠。

($ok, $err) = do_unlink($filename)

取消链接文件,这将封装 `unlink()`,使其在尝试取消链接最近更改的文件时跨平台更可靠。

($ok, $err) = try_sig_mask { ... }

使用多个屏蔽信号完成操作,它们将在最后取消屏蔽,允许处理任何被拦截的信号。

这主要用于需要使多个操作原子化(无论如何针对某些信号)时。

被拦截的信号

SIGINT
SIGALRM
SIGHUP
SIGTERM
SIGUSR1
SIGUSR2

注释和注意事项

5.10.0

使用较新的 gcc 版本编译时,Perl 5.10.0 会出现一个错误。每当启动一个新线程时,此错误都会导致段错误。Test2 将尝试检测到这一点,并注意在检测到时系统无法 fork。

Devel::Cover

Devel::Cover 不支持线程。如果在首次运行检查之前加载了 Devel::Cover,CAN_THREAD 将返回 false。

源代码

Test2 的源代码存储库可以在 http://github.com/Test-More/test-more/ 中找到。

维护者

Chad Granum <[email protected]>

作者

Chad Granum <[email protected]>
Kent Fredric <[email protected]>

版权

版权所有 2020 Chad Granum <[email protected]>。

本程序是免费软件;您可以在与 Perl 本身相同的条款下重新分发和/或修改它。

请参阅 https://dev.perl5.cn/licenses/