Test2::Util(3pm) Perl Programmers Reference Guide Test2::Util(3pm)

# [NAME](#NAME)

Test2::Util - Tools used by Test2 and friends.

# [DESCRIPTION](#DESCRIPTION)

Collection of tools used by Test2 and friends.

# [EXPORTS](#EXPORTS)

All exports are optional. You must specify subs to import.

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

Eval the codeblock, return success or failure, and the error message. This code protects $@ and $!, they will be restored by the end of the run. This code also temporarily blocks $SIG{DIE} handlers.

[protect { ... }](#protect)

Similar to try, except that it does not catch exceptions. The idea here is to protect $@ and $! from changes. $@ and $! will be restored to whatever they were before the run so long as it is successful. If the run fails $! will still be restored, but $@ will contain the exception being thrown.

[CAN\_FORK](#CAN_FORK)

True if this system is capable of true or pseudo-fork.

[CAN\_REALLY\_FORK](#CAN_REALLY_FORK)

True if the system can really fork. This will be false for systems where fork is emulated.

[CAN\_THREAD](#CAN_THREAD)

True if this system is capable of using threads.

[USE\_THREADS](#USE_THREADS)

Returns true if threads are enabled, false if they are not.

[get\_tid](#get_tid)

This will return the id of the current thread when threads are enabled, otherwise it returns 0.

[my $file = pkg\_to\_file($package)](#my)

Convert a package name to a filename.

$string = **ipc\_separator()**

Get the IPC separator. Currently this is always the string '~'.

$string = **gen\_uid()**

Generate a unique id (NOT A UUID). This will typically be the process id, the thread id, the time, and an incrementing integer all joined with the ipc\_separator().

These ID's are unique enough for most purposes. For identical ids to be generated you must have 2 processes with the same PID generate IDs at the same time with the same current state of the incrementing integer. This is a perfectly reasonable thing to expect to happen across multiple machines, but is quite unlikely to happen on one machine.

This can fail to be unique if a process generates an id, calls exec, and does it again after the exec and it all happens in less than a second. It can also happen if the systems process id's cycle in less than a second allowing 2 different programs that use this generator to run with the same PID in less than a second. Both these cases are sufficiently unlikely. If you need universally unique ids, or ids that are unique in these conditions, look at Data::UUID.

($ok, $err) = do\_rename($old\_name, $new\_name)

Rename a file, this wraps rename() in a way that makes it more reliable cross-platform when trying to rename files you recently altered.

($ok, $err) = do\_unlink($filename)

Unlink a file, this wraps unlink() in a way that makes it more reliable cross-platform when trying to unlink files you recently altered.

# [NOTES && CAVEATS](#NOTES_&&_CAVEATS)

5.10.0

Perl 5.10.0 has a bug when compiled with newer gcc versions. This bug causes a segfault whenever a new thread is launched. Test2 will attempt to detect this, and note that the system is not capable of forking when it is detected.

[Devel::Cover](#Devel::Cover)

Devel::Cover does not support threads. CAN\_THREAD will return false if Devel::Cover is loaded before the check is first run.

# [SOURCE](#SOURCE)

The source code repository for Test2 can be found at &lt;https://github.com/Test-More/test-more/&gt;.

# [MAINTAINERS](#MAINTAINERS)

[Chad Granum &lt;exodist@cpan.org&gt;](#Chad)

# [AUTHORS](#AUTHORS)

[Chad Granum &lt;exodist@cpan.org&gt;](#Chad~2)

[Kent Fredric &lt;kentnl@cpan.org&gt;](#Kent)

# [COPYRIGHT](#COPYRIGHT)

Copyright Chad Granum &lt;exodist@cpan.org&gt;.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

See &lt;https://dev.perl.org/licenses/&gt;

2026-10-21 perl v5.44.0

---

Document: Test2::Util(3pm) from perl 5.44.0-r2 (Chainguard OS)
Source: https://github.com/Perl/perl5.git
